如果我想绘制每个月出生人数的图表,并且我有一个列表,如:
[ {"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值有问题。我是否必须仔细查看清单并首先计算每个月的频率?我将处理一个更大的列表,其中包含一千多个项目,并且需要一个有效的解决方案。
答案 0 :(得分:0)
您可以使用ChainMap
首先展平字典列表,然后应用Counter
模块获取每个月的名字出现频率。然后,您可以提取月份名称和相应的频率,并使用条形图进行绘制。以下是使用您提供的数据的示例答案。如果要在x轴上对月份名称进行排序,则可以使用提供的here答案。
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()