2014-09-04 69 views
1

數據的測試:我有一個測試程序,其中有3個部分增加了整個程序的能力,例如, part1在60%的數據上工作,part2在額外的10%上,part3在另外6%上。python matplotlib堆疊在一起的barcharts

我想要做的是堆疊條顯示「程序在綠色上工作的數據總量中,表示數量part1處理的數量,紅色部分2和黃色部分3」。

因爲我已經在3套5個文件上測試了程序,我希望圖形通過將來自每個數據集的5個barcharts分組在一起來反映出這一點,因此最終有3個零件與圖形相距一英寸其他,然後每個條形圖都具有上述的堆疊效果。

我的目標是Y軸是文件工作的百分比,Y是文件所屬組的名稱。

至於一些示例數據,這是我一直在試圖用:

meta_part1 = [5, 5.5, 4.67, 6.54, 4.4] 
meta_part2 = [3.1, 3.3, 3.9, 3.5, 3.1] 
meta_part3 = [1.3,1.4,1.7,2.4,0.89] 

trans_part1 = [90,89.5,94.67,96.54,94.4] 
trans_part2 = [11.1,11.3,10.9,11.5,12.1] 
trans_part3 = [11.3,11.4,11.7,12.4,10.89] 

s_part1 = [55,55.5,54.67,56.54,54.4] 
s_part2 = [11.1,11.3,10.9,11.5,12.1] 
s_part3 = [11.3,11.4,11.7,12.4,10.89] 

元,反式和s所有組。

我失敗了到目前爲止的代碼是在這裏:

import matplotlib.pyplot as plt 
import numpy as np 
import numpy as np 
from numpy.random import randn 
import pandas as pd 
from scipy import stats 
import matplotlib as mpl 
import seaborn as sns 


meta_part1 = [5, 5.5, 4.67, 6.54, 4.4] 
meta_part2 = [3.1, 3.3, 3.9, 3.5, 3.1] 
meta_part3 = [1.3,1.4,1.7,2.4,0.89] 

trans_part1 = [90,89.5,94.67,96.54,94.4] 
trans_part2 = [11.1,11.3,10.9,11.5,12.1] 
trans_part3 = [11.3,11.4,11.7,12.4,10.89] 

s_part1 = [55,55.5,54.67,56.54,54.4] 
s_part2 = [11.1,11.3,10.9,11.5,12.1] 
s_part3 = [11.3,11.4,11.7,12.4,10.89] 

N = 5 

ind = np.arange(N) # the x locations for the groups 
width = 0.35  # the width of the bars: can also be len(x) sequence 

p1 = plt.bar(ind, meta_part1, width, color='y', bottom=meta_part2) 
p2 = plt.bar(ind, meta_part2, width, color='r', bottom=meta_part3) 
p3 = plt.bar(ind, meta_part3, width, color='g') 



plt.ylabel('Scores') 
plt.title('Difference between stitchers') 
plt.xticks(ind+width/3., ('Test1', 'Test2', 'Test3', 'Test4', 'Test5')) 
plt.yticks(np.arange(0,10,1)) 
plt.legend((p1[0], p2[0], p3[0]), ('Part1', 'Part2', 'Part3')) 
ax.autoscale(tight=True) 

plt.show() 

然而,這已經沒用了,只要它只是產生條帶2個堆疊部件,三是合併成第一和我havnt已經能夠正常工作了解如何將合併合併到此代碼中。

回答

1

您在此處的代碼段中沒有定義meta_secondmeta_total,所以很難猜測發生了什麼,但是我會採取一定的措施。您可能會添加+的列表以獲得meta_total,這會追加兩個列表而不會將這些值加在一起。

這裏是工作的修改:

meta_second = meta_part1 
meta_total = [meta_part1[i]+val for i, val in enumerate(meta_part2)] 
p1 = plt.bar(ind, meta_part1, width, color='y') 
p2 = plt.bar(ind, meta_part2, width, color='r', bottom=meta_second) 
p3 = plt.bar(ind, meta_part3, width, color='g', bottom=meta_total) 

而且,不相關的,但您嘗試使用ax定義之前。你應該嘗試堅持一個接口或其他(pyplot或面向對象的接口)。他們不喜歡混合。就個人而言,OO接口更加健壯和可靠,我總是使用它。

+0

對不起,我現在已經改變了命名,所以他們再次是正確的版本。也只是嘗試了這一點,似乎解決了堆疊問題,但它具有與matousc的響應相同的問題,因爲Y軸切割爲9,然而現在這些小節結束了,是否有任何方法可以確保尺寸保持在線路並一路向上?你是否也知道將所有這些條組合在一起的方法,以便我們可以在他們旁邊繪製第二組?謝謝! – Tom 2014-09-05 10:06:28

+0

蜱蟲在9之後消失,因爲你告訴他們。如果你希望它們是自動的,刪除'plt.yticks(np.arange(0,10,1))'。 – Ajean 2014-09-05 12:58:02