假设我有两个直方图,我使用 hist 的参数设置不透明度:'alpha=0.5'
我已经绘制了两个直方图,但我得到了三种颜色!我理解从不透明的角度来看这是有道理的。
但!用三种颜色向某人展示两个事物的图表会让人非常困惑。我可以以某种方式将每个垃圾箱的最小条设置在前面而没有不透明度吗?
示例图
假设我有两个直方图,我使用 hist 的参数设置不透明度:'alpha=0.5'
我已经绘制了两个直方图,但我得到了三种颜色!我理解从不透明的角度来看这是有道理的。
但!用三种颜色向某人展示两个事物的图表会让人非常困惑。我可以以某种方式将每个垃圾箱的最小条设置在前面而没有不透明度吗?
示例图
处理这个问题的常用方法是让地块有一些小的分隔。当plt.hist
给定多组数据时,默认情况下会这样做:
import pylab as plt
x = 200 + 25*plt.randn(1000)
y = 150 + 25*plt.randn(1000)
n, bins, patches = plt.hist([x, y])
相反,您可以将它们堆叠起来(这可以在上面使用参数来完成histtype='barstacked'
),但请注意顺序不正确。
这可以通过单独检查每对点以查看哪个更大然后使用zorder
来设置哪个先出现来解决。为简单起见,我使用上面代码的输出(例如,n 是 x 和 y 的每个 bin 中的点数的两个堆叠数组):
n_x = n[0]
n_y = n[1]
for i in range(len(n[0])):
if n_x[i] > n_y[i]:
zorder=1
else:
zorder=0
plt.bar(bins[:-1][i], n_x[i], width=10)
plt.bar(bins[:-1][i], n_y[i], width=10, color="g", zorder=zorder)
这是生成的图像:
通过像这样改变顺序,图像看起来确实很奇怪,这可能就是为什么它没有被实现并且需要一个 hack 来做。我会坚持使用小分离方法,任何习惯于这些图的人都假设它们采用相同的 x 值。