2016-01-29 92 views
0

我既然这么绘制tuplets名单的直方图matplotlib

k = [(8, 8),(10, 10),(8, 8), 
(8, 8),(12, 12),(7, 7),(8, 8), 
(9, 9),(10, 10),(10, 10),(8, 8),(9, 9),(13, 13), 
(10, 10),(8, 8),(8, 8),(7, 7)] 

我要为每个连音的频率的简单直方图tuplets的列表。怎么会这样做呢?

标准plt.dist似乎不太有效,也没有将连音符重新映射到单个变量。

回答

3

直方图(numpy.hist,plt.hist)通常是连续的数据,您可以很容易地在箱中分开。

这里要算相同的元组:你可以使用collection.Counter

from collections import Counter 
k = [(8, 8),(10, 10),(8, 8), 
(8, 8),(12, 12),(7, 7),(8, 8), 
(9, 9),(10, 10),(10, 10),(8, 8),(9, 9),(13, 13), 
(10, 10),(8, 8),(8, 8),(7, 7)] 

c=Counter(k) 
>>> Counter({(8, 8): 7, (10, 10): 4, (9, 9): 2, (7, 7): 2, (13, 13): 1, (12, 12): 1}) 

一些格式后,您可以使用plt.bar绘制每个元组的数量,以直方图的方式。

# x axis: one point per key in the Counter (=unique tuple) 
x=range(len(c)) 
# y axis: count for each tuple, sorted by tuple value 
y=[c[key] for key in sorted(c)] 
# labels for x axis: tuple as strings 
xlabels=[str(t) for t in sorted(c)] 

# plot 
plt.bar(x,y,width=1) 
# set the labels at the middle of the bars 
plt.xticks([x+0.5 for x in x],xlabels) 

tuple bar plot