2015-10-13 38 views
0

我試圖使用matplotlib使用下面的代碼,但起點和第二部分的終點創建堆棧條形圖創建堆疊條形圖是錯誤的如何使用matplotlib

import numpy as np 
import matplotlib.pyplot as plt 

N = 7 
m = (5,10,30,40,0,0,0)  #(0-5,0-10,26-30,36-40) 
w = (15,25,35,0,0,0,0)  #(11-15,16-25,31-35) 
ind=[5,10 ,15 ,25 ,30,35,40] 
# the x locations for the groups 
width = 0.55  # the width of the bars: can also be len(x) sequence 

p1 = plt.bar(ind, m, width, color='r') 
p2 = plt.bar(ind, w, width, color='y',bottom=m) 

plt.show() 

#(0-5,0-10,26-30,36-40) #(11-15,16-25,31-35)條形圖情節上對方,但我希望第一部分是0到5,第二部分是6到15,但是它給了5 + 15 = 20,這是錯誤的,我不想加入它。我的意思是,如果第一部分是0-5,第二部分是6-15,這樣它會顯示0-5和6-15不能達到5 + 15 = 20

回答

0

所以,如果我理解你是正確的,噸真的想要一個堆積的條形圖,你想w陰謀m後面。您可以通過設置的mzorderw下做到這一點:

p1 = plt.bar(ind, m, width, color='r',zorder=2) 
p2 = plt.bar(ind, w, width, color='y',zorder=1) 

enter image description here

另外,如果你想保持bottom=m選項,則需要從w減去m。首先,您需要將mw轉換爲numpy.array。然後,你可以畫出p2這樣的:

p2 = plt.bar(ind, np.maximum(w-m,0), width, color='y',bottom=m) 

請注意,你必須使用np.maximum防止w變爲負值,例如當m=40w=0

+0

感謝這個權利我有一個問題,我有一些範圍爲例如0-5正常6-10正常11-25我陷阱,再一次26-35正常我怎麼能顯示這個範圍在不同顏色的單欄上的標籤但相同的類別應該有相同的顏色 – sohamkumar

+0

我希望單個欄上的這個值不是2-3欄與不同的顏色和相同的類別應該有相同的顏色 – sohamkumar