web-dev-qa-db-ja.com

バーが高さに従って並べられているWord頻度ヒストグラムを生成する方法

単語のリストが長いので、リスト内の各単語の頻度のヒストグラムを生成したいと思います。私は以下のコードでそれを行うことができました:

_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})。どうすればそれを達成できますか?

9
BKS

最初にデータを並べ替えてから、順序付けられた配列をbarに渡すことで、目的の出力を実現できます。以下で使用します numpy.argsort そのために。プロットは次のようになります(バーにもラベルを追加しました)。

enter image description here

いくつかのインラインコメントを含むプロットを生成するコードは次のとおりです。

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

プロットのフレームを削除してバーに直接ラベルを付ける場合は、 この投稿 を確認できます。

13
Cleb