散点图显示多数并包括极端数字
Scatter plot to show the majorities and include extreme numbers
下面的简单数据,我想把它们放在散点图中。
如果没有异常值(即非常大的数字),一切顺利。
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 以下的散点分布,并注意存在极端数字。
谢谢。
如果您不想使用对数刻度,可以将图一分为二(或更多)并绘制值 below/above 阈值:
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)
输出:
下面的简单数据,我想把它们放在散点图中。
如果没有异常值(即非常大的数字),一切顺利。
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 以下的散点分布,并注意存在极端数字。
谢谢。
如果您不想使用对数刻度,可以将图一分为二(或更多)并绘制值 below/above 阈值:
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)
输出: