【问题标题】:Matplotlib-How do I plot a graph where the x values are the frequency of each y value?Matplotlib-如何绘制 x 值是每个 y 值的频率的图表?
【发布时间】:2019-06-10 21:56:34
【问题描述】:

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

[ {"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 值的问题。我必须先浏览列表并计算每个月的频率吗?我将处理一个包含一千多个项目的更大列表,并且需要一个高效的解决方案。

【问题讨论】:

  • 下面的答案能解决你的问题吗?如果是,则将其标记为已接受以表明问题已得到回答

标签: python matplotlib plot graph


【解决方案1】:

您可以先使用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()

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多