単語のリストが長いので、リスト内の各単語の頻度のヒストグラムを生成したいと思います。私は以下のコードでそれを行うことができました:
_import csv
from collections import Counter
import numpy as np
Word_list = ['A','A','B','B','A','C','C','C','C']
counts = Counter(merged)
labels, values = Zip(*counts.items())
indexes = np.arange(len(labels))
plt.bar(indexes, values)
plt.show()
_
ただし、counts
を出力すると、Counter({'C': 4, 'A': 3, 'B': 2})
。どうすればそれを達成できますか?
最初にデータを並べ替えてから、順序付けられた配列をbar
に渡すことで、目的の出力を実現できます。以下で使用します numpy.argsort
そのために。プロットは次のようになります(バーにもラベルを追加しました)。
いくつかのインラインコメントを含むプロットを生成するコードは次のとおりです。
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
Word_list = ['A', 'A', 'B', 'B', 'A', 'C', 'C', 'C', 'C']
counts = Counter(Word_list)
labels, values = Zip(*counts.items())
# sort your values in descending order
indSort = np.argsort(values)[::-1]
# rearrange your data
labels = np.array(labels)[indSort]
values = np.array(values)[indSort]
indexes = np.arange(len(labels))
bar_width = 0.35
plt.bar(indexes, values)
# add labels
plt.xticks(indexes + bar_width, labels)
plt.show()
最初のn
エントリのみをプロットしたい場合は、行を置き換えることができます
counts = Counter(Word_list)
沿って
counts = dict(Counter(Word_list).most_common(n))
上記の場合、counts
は次のようになります。
{'A': 3, 'C': 4}
にとって n = 2
。
プロットのフレームを削除してバーに直接ラベルを付ける場合は、 この投稿 を確認できます。