所以说我有以下内容:
[1,5,1,1,6,3,3,4,5,5,5,2,5]
Counts: {1:3, 2:1, 3:2, 4:1, 5:5, 6:1}
现在,我想打印一个像x轴排序的直方图,如:
传统的直方图是:
X
X
X X
X X X
X X X X X X
1 2 3 4 5 6
我想要的是:
X
X
X X
X X X
X X X X X
2 4 3 1 5
我目前的绘图代码是:
plt.clf()
plt.cla()
plt.xlim(0,1)
plt.axvline(x=.85, color='r',linewidth=0.1)
plt.hist(correlation,2000,(0.0,1.0))
plt.xlabel(index[thecolumn]+' histogram')
plt.ylabel('X Data')
savefig(histogramsave,format='pdf')
请帮我解释一下我是怎么做到的......我知道我之前发过一个类似的问题,但我相信我不清楚它......
答案 0 :(得分:4)
直方图不是您要查找的图表。使用条形图。
import numpy as np
import matplotlib.pyplot as plt
data = [1, 5, 1, 1, 6, 3, 3, 4, 5, 5, 5, 2, 5]
correlation = [(i, data.count(i)) for i in set(data)]
correlation.sort(key=lambda x: x[1])
labels, values = zip(*correlation)
indexes = np.arange(len(correlation))
width = 1
plt.bar(indexes, values, width)
plt.xticks(indexes + width * 0.5, labels)
plt.show()
编辑:对于大量数据,最好使用collections.Counter代替count
的列表理解。
以下是更快地存档相同结果的方法(既没有条形图也没有条形图):
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
data = np.random.random_integers(0, 10**4, 10**5)
correlation = Counter(data).items()
correlation.sort(key=lambda x: x[1])
labels, values = zip(*correlation)
indexes = np.arange(len(correlation))
plt.plot(indexes, values)
plt.fill_between(indexes, values, 0)
plt.show()