繁体   English   中英

Matplotlib-如何在x值是每个y值的频率的位置绘制图?

[英]Matplotlib-How do I plot a graph where the x values are the frequency of each y value?

如果我试图绘制每个月出生人数的图表,并且我有一个列表,例如:

[ {"bob": "January"},{"Peter":"February"},{"Mary":"March"}, {"John":"March"}, {"Sully": "March"}, {"Kai":"April"} ,{"Jerry": "February"}, {"Polly":"may"}, {"Nina": "June"}, {"Mic": "July"}, {"Paul": "August"}, {"Ferry": "January"}]

在x轴上以月​​为单位,在y轴上以该月的出生人数绘制图表的最佳方法是什么? 我的y值是月份,但x值有问题。 我是否必须仔细查看清单并首先计算每个月的频率? 我将处理一个更大的列表,其中包含一千多个项目,并且需要一个有效的解决方案。

您可以使用ChainMap首先展平字典列表,然后应用Counter模块获取每个月的名字出现频率。 然后,您可以提取月份名称和相应的频率,并使用条形图进行绘制。 以下是使用您提供的数据的示例答案。 如果要在x轴上对月份名称进行排序,可以使用此处提供的答案。

from collections import Counter, ChainMap
import matplotlib.pyplot as plt

figure = plt.figure(figsize=(8, 6))

dictionary = [{"bob": "January"},{"Peter":"February"},{"Mary":"March"}, {"John":"March"}, 
                  {"Sully": "March"}, {"Kai":"April"} ,{"Jerry": "February"}, {"Polly":"may"}, 
                  {"Nina": "June"}, {"Mic": "July"}, {"Paul": "August"}, {"Ferry": "January"}]

dict_flat = ChainMap(*dictionary)

frequency = Counter(dict_flat.values()).most_common()
x, y = zip(*frequency)

plt.bar(x, y, width=0.5)
plt.show()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM