Matplotlib绘图报错x和y维度不一致:骰子预测实验运行问题
问题成因
报错的核心原因是matplotlib绘制折线图时,要求传入的x轴数据集和y轴数据集的长度必须完全相等,你当前代码的两组数据长度不一致,因此触发维度不匹配错误:
- 你定义的x轴数据
t = np.arange(0, 100)生成了包含100个元素的数组,长度为100 - 你设置的实验次数
times = 50,最终存储实验结果的rolls列表仅循环追加了50个值,作为y轴数据长度仅为50
两者长度不匹配,就会抛出你遇到的ValueError: x and y must have same first dimension, but have shapes (100,) and (50,)报错。
添加numpy.random代码后运行正常的原因
你添加的numpy随机相关代码大概率是修改了其中某组数据的长度,刚好让两者长度对齐,比如不小心把times改成了100,或者把t的长度改成了50,只要两者长度一致就不会触发该错误。
修复方案
有两种通用修复方式,任选其一即可:
方案1:修改x轴数组长度和y轴匹配
将原来的
t = np.arange(0, 100)
修改为
t = np.arange(times)
这样x轴长度和实验次数times自动对齐,不需要手动调整数值。
方案2:修改实验次数和x轴长度匹配
将原来的
times = 50
修改为
times = 100
让实验结果的长度和x轴的100个元素对应。
修复后完整代码示例
import matplotlib.pyplot as plt from math import * import numpy as np import random as r times = 50 dices = 100 avg = ((6+1)/2)*dices t = np.arange(times) rolls = [] for x in range(times): total = 0 for i in range(dices): total += r.randint(1, 6) rolls.append(total) fig, ax = plt.subplots() ax.plot(t,np.array(rolls)) ax.set(xlabel='Roll number', ylabel='Total', title='Dice normal distribution') plt.ylim(100, 600) fig.savefig("test.png") plt.show()
内容的提问来源于stack exchange,提问作者Bulieme
相关产品推荐
相关产品推荐

