根据色谱柱的高度绘制具有x轴值的直方图

时间:2013-03-28 00:32:18

标签: python matplotlib plot histogram

所以说我有以下内容:

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

请帮我解释一下我是怎么做到的......我知道我之前发过一个类似的问题,但我相信我不清楚它......

1 个答案:

答案 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()

bar chart

编辑:对于大量数据,最好使用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()