散点图显示多数并包括极值

Posted

技术标签:

【中文标题】散点图显示多数并包括极值【英文标题】:Scatter plot to show the majorities and include extreme numbers 【发布时间】:2022-01-07 08:03:02 【问题描述】:

简单数据如下,我想把它们放在散点图中。

如果没有异常值(即非常大的数字),一切顺利。

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

dates = ["2021-01-01",
"2021-01-01", "2021-01-06",
"2021-01-08", "2021-01-12",
"2021-02-01", "2021-02-11",
"2021-02-12", "2021-02-15",
"2021-02-16", "2021-03-11",
"2021-03-21", "2021-03-22",
"2021-03-23", "2021-03-24",
"2021-04-02", "2021-04-12",
"2021-04-22", "2021-04-26",
"2021-04-30"]

numbers= [6400,
5100,5000,
4000,3686,
9000,8050,
8000,6050,
6000,9000,
8500,7800,
7000,6000,
10000,9600,
8000,7883,
6686]

dates = [pd.to_datetime(d) for d in dates]

plt.scatter(dates, numbers, s =100, c = 'red')
plt.show()

但是当有一个或多个极端数字时,例如最后一个数字 6686 变为 66860。新图显示大多数散点不显着(因为新的 y 轴)。

像以前一样有散点图(保持 y 轴不变),并且仍然可视化极值,有什么好的解决方案?

图表的目的是显示和关注10000以下的散点分布,并注意存在极值。

谢谢。

【问题讨论】:

您可以使用对数刻度。真正的问题是你想在这张图中传达什么信息? @mozway,感谢您的评论。图表的读者不了解对数刻度的概念,因此最好保持 y 轴正常。 @mozway,图表的目的是显示和关注10000以下(数字)的散点分布,并注意存在极端数字。 【参考方案1】:

如果您不想使用对数刻度,可以将绘图分成两个(或更多)并绘制低于/高于阈值的值:

df = pd.DataFrame('num': numbers, index=dates)
thresh = 12000

f, (ax1, ax2) = plt.subplots(nrows=2, sharex=True,
                             gridspec_kw='height_ratios': (1,3),
                             figsize=(10,4)
                            )

lows  = df.mask(df['num'].ge(thresh))
highs = df.mask(df['num'].lt(thresh))

ax2.scatter(df.index, lows)
ax1.scatter(df.index, highs)

输出:

【讨论】:

哇!惊人的!我从来没有想过这个。谢谢!

以上是关于散点图显示多数并包括极值的主要内容,如果未能解决你的问题,请参考以下文章

excel中如何自动生成散点图并进行线性拟合,然后用拟合出来的公式计算另外的值?

我可以使用带有熊猫数据框的散点图绘制回归线并显示参数吗?

怎么用gis做散点图显示样方

excel散点图坐标轴怎么只显示整百整千整万

为啥 k-means 聚类散点图显示不同的结果?

matlab如何拟合散点图,我想得到散点图函数?