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.Countercountを使用することをお勧めします。


そして、同じ結果をはるかに高速にアーカイブする方法を次に示します (棒グラフも履歴もなし):

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 に答える