【问题标题】:How to display Python Crash Course Chapter 15 histogram using matplotlib如何使用 matplotlib 显示 Python 速成课程第 15 章直方图
【发布时间】:2019-01-15 04:28:59
【问题描述】:

所以我在 Python Crash Course book 中做题,在第 15 章“自己尝试”部分问题 15-10 的末尾,你的任务是“尝试使用 matplotlib 进行模压可视化...... " 我已经列出了所有信息并且没有错误,但是当程序运行时,直方图会显示图形和轴,但不会显示实际数据。有人知道为什么会发生这种情况以及我缺少什么吗?

有一个名为 Die() 的模块和类用于初始化并随机创建卷。这个类和程序完美运行,并在下面的程序中调用。

骰子频率直方图应用

import matplotlib
import matplotlib.pyplot as plt
from die import Die

# create two D6 dice
die_1 = Die()
die_2 = Die()

# make some rolls, and store results in a list.
results = []
for roll_num in range(5000):
    result = die_1.roll() + die_2.roll()
    results.append(result)

# analyze the results.
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)

plt.bins = []
x_max = die_1.num_sides + die_2.num_sides
for label in range(2, x_max+1):
    plt.bins.append(label)
print(frequencies)
plt.hist(frequencies, plt.bins, histtype = 'bar', facecolor = 'blue')

plt.title("Dice Plot")
plt.xlabel("Results")
plt.ylabel("Frequency of Result")
plt.axis([0,12,0,300])
plt.show()

我希望得到一组看起来像正态曲线模型的数据。但是,我没有显示任何数据。再次显示图形和轴,但不显示实际数据。

【问题讨论】:

  • print(results) 提供了什么?
  • 追加到results 的位置不会缩进到循环块中,因此在for roll_num in range(5000): 之后只会追加一个结果。
  • 当我读到这篇文章时,看起来bins 应该是一个整数,而不是一个范围? matplotlib.org/1.2.1/examples/pylab_examples/…
  • plt.bins = [] - 为什么要向 plt 添加 bin 属性?

标签: python matplotlib histogram


【解决方案1】:

如果您使用六面骰子并滚动 5000 次,则频率值都在 450 +/- 范围内。你告诉plt.hist,bin 边缘是 2 到 12 - 所以你所有的条在图表的右边都是不按比例的。

有 11 个可能的值,所以告诉 .hist 有 11 个 bin。

plt.hist(freqs,11)

更好的是,您应该让.hist 确定频率 - 我认为这正是您想要的。

plt.hist(results,11)

【讨论】:

    【解决方案2】:

    我猜你不应该尝试绘制已经直方图值的直方图。而是直接使用results。您可以调整分类以反映结果本质上是离散的这一事实。

    import numpy as np
    import matplotlib.pyplot as plt
    
    class Die():
        num_sides=6
        def roll(self):
            return np.random.randint(1,self.num_sides+1)
    
    # create two D6 dice
    die_1 = Die()
    die_2 = Die()
    
    # make some rolls, and store results in a list.
    results = []
    for roll_num in range(5000):
     result = die_1.roll() + die_2.roll()
     results.append(result)
    
    # analyze the results.
    frequencies = []
    max_result = die_1.num_sides + die_2.num_sides
    
    x_max = die_1.num_sides + die_2.num_sides
    
    plt.hist(results, bins=np.arange(2, max_result+2)-.5, histtype = 'bar', 
             rwidth=0.8, facecolor = 'blue', edgecolor="k")
    
    plt.title("Dice Plot")
    plt.xlabel("Results")
    plt.ylabel("Frequency of Result")
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 2011-09-06
      • 2021-02-15
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多