2013-08-26 95 views
6

繪製兩個柱狀圖當比方說,我有兩個柱狀圖和我使用HIST的參數設置不透明度誤導:「阿爾法= 0.5」不透明度,同時與matplotlib

我策劃了兩個柱狀圖但我得到三個顏色!我從不透明的角度理解這是有道理的。

但是!向某人展示三種顏色的兩件事物的圖形是非常令人困惑的。我能以某種方式將每個垃圾箱的最小欄設置在前面,並且沒有不透明度嗎?

實施例圖

enter image description here

+2

如果你實際上不想要'alpha <1',而不是確定白色上的半透明顏色是什麼顏色,並且使用了不透明的顏色條。 – tacaswell

+2

您應該包含您用於生成繪圖的代碼,因爲較少的人可能會爲您編寫整個代碼,而不是修復現有的代碼。 – hooy

+0

您用來生成此圖表的代碼是什麼? –

回答

8

通常的方法這一問題的處理是有一個與一些小的分離的圖。這是在默認情況下,當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):

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) 

這裏是所得到的圖像: enter image description here

通過改變像這樣的順序,圖像確實看起來很奇怪,這可能是爲什麼它沒有實現,並需要一個黑客來做到這一點。我會堅持使用小分離方法,任何習慣這些圖的人都會假設他們採用相同的x值。