2014-12-01 28 views
1

的頻率着色如果非要Matplotlib直方圖,其中每個區間被附加參數

data = [(1, 'a'), (1, 'b'), (1, 'a'), (2, 'a'), (2, 'b'), (3, 'c'), (3, 'c'), (3, 'c'), (3, 'c')] 

使得存在兩個屬性爲每個數據點:

x, y = zip(*data) 

我可以在直方圖顯示x, ala:

x = [1, 1, 1, 2, 2, 3, 3, 3, 3] 
bins = [1, 2, 3]; f = [3, 2, 4]`. 

然後,使用第二個屬性

y = ['a', 'b', 'a', 'a', 'b', 'c', 'c', 'c', 'c'] 

從原來的直方圖中的每個倉先後爲副參數頻率信息:

bins[0] = {'a': 2, 'b': 1} 
bins[1] = {'a': 1, 'b': 1} 
bins[2] = {'b': 1, 'c': 3} 

使用matplotlib,我可以創造的x基本直方圖:

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 
n, bins, patches = ax.hist(x, 3) 

是否有巧妙地迭代修補程序的方式,或許可以將它們分解成反映附加信息的適當大小的矩形,y

在這個例子中,如果希望'a'紅色'b'綠色'c'藍色,然後第一倉(X = 1)將是三分之二紅色三分之一綠色,第二倉(X = 2)。將半紅半綠色和最終容器(X = 3)。將四分之一綠色四分之三藍色

Example illustration

+1

[這些示例](http://matplotlib.org/examples/statistics/histogram_demo_multihist.html)有幫助嗎? – 2014-12-01 15:54:48

回答

0

我知道這是不是很完整的答案,但如果你要重新格式化您的數據,那麼你可以使用一些內置的功能hist以避免手工編寫代碼的一切了。

例如,您可能使其中包含所有x值與給'a'y值相等,另一個地方y = 'b'名單,最後,一個地方y = 'c'。然後,您可以將這些列表堆疊到另一個列表中,並在stacked = True上調用hist

請參閱http://matplotlib.org/1.3.1/examples/pylab_examples/histogram_demo_extended.html(第五面板下)的說明。

+0

我相信這對我很有用,感謝您的建議! – pixels 2014-12-02 12:27:26