BKS*_*BKS 8 python matplotlib ranking histogram python-2.7
我有很长的单词列表,我想生成列表中每个单词频率的直方图.我能够在下面的代码中这样做:
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()
Run Code Online (Sandbox Code Playgroud)
但是,它不按等级显示分档(即按频率显示,因此最高频率是左边的第一个分箱,依此类推),即使我打印counts它时也为我命令Counter({'C': 4, 'A': 3, 'B': 2}).我怎么能实现这一目标?
Cle*_*leb 13
您可以通过先排序数据然后将有序数组传递给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()
Run Code Online (Sandbox Code Playgroud)
如果您只想绘制第一个n条目,可以替换该行
counts = Counter(word_list)
Run Code Online (Sandbox Code Playgroud)
通过
counts = dict(Counter(word_list).most_common(n))
Run Code Online (Sandbox Code Playgroud)
在上面的情况下,counts将是
{'A': 3, 'C': 4}
Run Code Online (Sandbox Code Playgroud)
对n = 2.
如果您想删除绘图的框架并直接标记条形,您可以查看此帖子.
| 归档时间: |
|
| 查看次数: |
12614 次 |
| 最近记录: |