2015-02-08 289 views
12

我正在繪製直方圖,並且我有三個數據集,我想要一起繪製,每個數據集都有不同的顏色和線型(虛線,虛線等)。 我也給了一些透明度,以看到重疊的酒吧。Matplotlib:繪製具有不透明邊緣的透明直方圖

重點是,我希望每個欄的邊緣不會像內部一樣變得透明。 下面是一個例子:

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() 

enter image description here

回答

13

plt.hist接受傳遞給構造爲matplotlib.patches.Patch額外的關鍵字參數。尤其是,您可以傳遞fc=參數,該參數允許您在創建直方圖時使用(R, G, B, A)元組設置修補程序facecolor。改變facecolor的α值不影響邊緣的透明度:

ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, fc=(0, 0, 1, 0.5)) 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, fc=(1, 0, 0, 0.5)) 
ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, fc=(0, 0, 0, 0.5)) 

enter image description here

2

我想也許是最笨的解決方案是最簡單,最好的?只需重新繪製直方圖,沒有內部顏色和沒有alpha。這應該重新繪製直方圖線。

另外,你可能想消除具有線/虛線/點不是從第一直方圖

import matplotlib as mpl 
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), edgecolor='None', alpha = 0.5, color= 'b') 
ax.hist(y, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'r') 
ax.hist(z, bins=np.arange(0, 1, 0.1), edgecolor="None", alpha = 0.5, color= 'k') 


ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, facecolor="None") 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, facecolor="None") 
ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, facecolor="None") 

plt.show() 

完全刪除它們沒有第二個訂單重疊圖形看起來應該像你的身材沒有的機會任何邊界。通過添加底部3個直方圖命令邊框來生成圖像波紋管。在Python3.4 Win7的

作品[切,因爲顯然我沒有足夠的代表張貼圖片]