Python绘制多个幂函数时触发ValueError维度不匹配报错的求助
报错根因定位
- 触发报错的代码行是
plt.plot(a, d, 'g') - 其中参数
a是通过logspace(-4, 2, 10)生成的一维数组,形状为(10,),包含10个x轴取值点 - 参数
d是单个数值常量0.685,形状为(1,),二者维度长度不匹配,matplotlib无法建立逐点的x-y对应关系,因此抛出维度不一致的ValueError。
可落地的修改方案
方案1:使用专用接口绘制水平参考线(推荐)
如果设计需求是画出值恒为0.685的水平直线,不需要逐点绑定x轴取值,直接调用axhline方法实现,完全规避维度匹配问题,修改后的可运行代码如下:
from numpy import * import matplotlib.pyplot as plt a = logspace(-4, 2, 10) m = 0.315 * a**-3 r = 0.0000926 * a**-2 plt.plot(a, m, 'r', label='m幂函数曲线') plt.plot(a, r, 'b', label='r幂函数曲线') # 直接绘制y=0.685的绿色水平参考线 plt.axhline(y=0.685, color='g', label='d水平参考值') # 匹配logspace生成的x轴做对数刻度,优化幂函数曲线展示效果 plt.xscale('log') plt.legend() plt.show()
方案2:将常量拓展为与a等长的数组
如果坚持使用plt.plot逐点绘制的逻辑,只需要把标量常量d拓展为和a形状完全一致的数组,让二者维度匹配即可,对应修改代码:
# 原代码的d = 0.685 替换为下面的写法,自动生成和a形状一致的全0.685数组 d = 0.685 * ones_like(a)
修改后再执行原有的三行plt.plot逻辑即可正常运行。
冗余代码清理提示
- 原代码中导入的
math模块全程未被调用,可以直接删除该行减少不必要的依赖加载。 - 因为x轴是对数间隔的采样值,默认线性刻度会导致点分布在x轴右侧密集、左侧稀疏,增加
plt.xscale('log')设置后,幂函数曲线的趋势展示会更清晰。
内容的提问来源于stack exchange,提问作者Debbie
相关产品推荐
相关产品推荐

