2

所以说我有以下内容:

[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')

请帮助我如何做到这一点......我知道我之前发布过类似的问题,但我相信我不清楚......

4

1 回答 1

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()
于 2013-03-28T01:33:50.537 回答