[英]how to plot histogram in matplotlib when data is in tuples?
我需要在列表中绘制5个最频繁出现的单词的直方图。 我使用了集合模块的c.counter()。most_common()给我以下元组:
[('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
当数据采用格式(“字”,频率)时,如何绘制直方图?
我熟悉的格式为:['you','you','you',...,'i','i','i',...等]
我知道我可以将字符串乘以每个元素中的整数以以我熟悉的格式在直方图上绘制一个新列表,但是我觉得必须有一种更有效的方法来执行此操作。
解压缩您的元组列表:
from matplotlib import pyplot as plt
a = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
plt.bar(*zip(*a))
plt.show()
您可以使用matplotlib条形图:
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
items = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
y_pos = np.arange(len(items))
plt.bar(y_pos, [x[1] for x in items], align='center', alpha=0.5)
plt.xticks(y_pos, [x[0] for x in items])
plt.show()
这是使用Matplotlib
和Seaborn
的上述解决方案的扩展:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
lst = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
val, cnt = (zip(*lst))
val, cnt = list(val), list(cnt)
val, cnt
# (['you', 'i', 'we', 'my', 'he'], [7706, 6570, 2733, 2718, 2369])
# using Matplotlib
length = len(cnt)
plt.bar(np.arange(length), cnt, label=True)
plt.xticks(np.arange(len(cnt)), val)
plt.show()
# using seaborn
sns.barplot( val, cnt )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.