我正在绘制一个直方图,我有三个数据集,我想一起绘制,每个数据集都有不同的颜色和线型(虚线,点线等)。我还提供了一些透明度,以便看到重叠的酒吧。
重点是,我希望每个酒吧的边缘不会像内部部分那样变得透明。下面是一个例子:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.random(20)
y =np.random.random(20)
z= np.random.random(20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', alpha = 0.5, lw=3, color= 'b')
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', alpha = 0.5, lw=3, color= 'r')
ax.hist(z, bins=np.arange(0, 1, 0.1), alpha = 0.5, lw=3, color= 'k')
ax.set_xlim(-0.5, 1.5)
ax.set_ylim(0, 7)
plt.show()
3条答案
按热度按时间wecizke31#
plt.hist
接受传递给matplotlib.patches.Patch
构造函数的附加关键字参数。特别是,您可以传递一个fc=
参数,它允许您在创建直方图时使用(R, G, B, A)
元组设置面片面部颜色。更改面部颜色的Alpha值不会影响边缘的透明度:34gzjxbg2#
我认为最愚蠢的解决方案也许是最简单和最好的?只是重新绘制直方图,没有内部颜色和阿尔法。这应该只是重新绘制直方图线。
此外,您可能希望通过从第一个直方图中完全删除线/虚线/点来消除它们不重叠的可能性
如果没有二阶,图形应该看起来像没有任何边界的图形。底部的3个直方图命令添加了边界,以产生下面的图像。适用于Python3.4 Win7
[cut因为显然我没有足够的代表张贴图片]
lb3vh1jj3#
我需要一个不需要显式设置颜色的解决方案,即,我希望仍然使用默认的颜色循环。下面的解决方案基于@ljetibo的想法,使用@ali_m的想法绘制直方图两次以提取颜色循环的状态:
请注意,除了
edgecolor
之外,还需要指定color=color
。否则,hist
调用本身将再次递增颜色循环。