因此,我在Python Crash课程书中遇到了问题,在第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()
我希望获得一个法线曲线模型外观的数据集。但是,我没有显示任何数据。再次显示图形和轴,但不显示实际数据。
答案 0 :(得分:0)
如果使用六面骰子并且滚动5000次,则频率值都在450 +/-范围内。您告诉plt.hist
,bin的边缘是2到12,因此您所有的条形图都在图的右侧成比例。
有11个可能的值,所以告诉.hist
有11个垃圾箱。
plt.hist(freqs,11)
更好的是,您应该让.hist
确定频率-我认为这确实是您想要的。
plt.hist(results,11)
答案 1 :(得分:0)
我想您不应尝试绘制已经直方图化的值的直方图。而是直接使用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()