【问题标题】:Histogram with grades成绩直方图
【发布时间】:2019-05-23 04:08:54
【问题描述】:

我需要用 Python 制作一个带有成绩分布的直方图。我使用 matplotlib。

import matplotlib.pyplot as plt

plt.title('Histogram Grades')
data = [1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 1, 3, 10, 8, 9, 5, 3, 7, 7, 3]
data.sort
plt.hist(data)
plt.ylabel('Count')
plt.show()

直方图没问题,但我不喜欢 python 用来在 x 轴上显示成绩的分组。我想知道是否有一种方法(一些历史参数或另一个绘图库),我可以在其中为每个单独的等级设置条形图?

提前致谢。

【问题讨论】:

    标签: python matplotlib histogram


    【解决方案1】:

    这可能有点繁琐,但是一旦你有了正确的参数,你几乎可以自定义所有东西。主要问题似乎是让bins 正确并使用rwidth 设置基本宽度。

    也许这更接近您的期望:

    import matplotlib.pyplot as plt
    
    plt.title('Histogram Grades')
    data = [1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 2]
    plt.hist(data, rwidth=.8, bins=np.arange(min(data), max(data)+2) - 0.5)
    
    plt.xticks(np.arange(min(data), max(data)+1, 1.0))
    plt.ylabel('Count')
    plt.show()
    

    【讨论】:

    • 这正是我想要的。非常感谢。
    【解决方案2】:

    由于您想要频率条形图,我个人建议使用Counter 模块来计算频率。它返回一个字典,其键是成绩,值是它们对应的频率。 将 matplotlib.pyplot 导入为 plt 从集合导入计数器

    data = [1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 1, 3, 10, 8, 9, 5, 3, 7, 7, 3]
    freqs = Counter(data)
    # Counter({1: 2, 3: 6, 10: 2, 8: 2, 9: 2, 5: 2, 7: 4})
    
    plt.bar(freqs.keys(), freqs.values())
    plt.ylabel('Count')
    plt.title('Histogram Grades')
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多