Python绘制常函数报错ValueError:x与y维度不匹配问题求助
解决Matplotlib绘制常函数时的维度不匹配错误
嘿,我懂你碰到的这个问题了!你写的constant_function现在不管传入什么参数,都只返回单个数值2——当你把长度为10的数组t1传进去时,函数还是输出一个标量,这就导致Matplotlib拿到的y轴数据形状是(1,),而x轴的t1形状是(10,),两者长度不匹配,自然就抛出ValueError了。
给你几个简单的解决办法,挑你顺手的用就行:
修改函数,让它返回和输入同长度的数组
用np.full_like生成一个和输入数组形状、数据类型完全一致的数组,所有元素都设为你要的常数值:import matplotlib.pyplot as plt import numpy as np def constant_function(x): return np.full_like(x, 2) # 生成和x同维度的全2数组 t1 = np.arange(0.0, 1.0, 0.1) plt.plot(t1, constant_function(t1)) plt.show()直接生成对应长度的常数值数组
要是不想改函数,也可以直接在绘图时生成和t1长度匹配的常数值数组:import matplotlib.pyplot as plt import numpy as np t1 = np.arange(0.0, 1.0, 0.1) plt.plot(t1, np.ones_like(t1) * 2) # 先造全1数组再乘2得到全2数组 plt.show()利用Matplotlib的自动广播特性
其实Matplotlib本身支持标量和数组的广播,你甚至可以直接传标量进去,它会自动把标量扩展成和x轴数组同长度的数组:import matplotlib.pyplot as plt import numpy as np t1 = np.arange(0.0, 1.0, 0.1) plt.plot(t1, 2) # 自动广播标量2为长度10的数组 plt.show()
这三种方法都能解决你的维度不匹配问题,选哪种看你的实际需求场景就行~
内容的提问来源于stack exchange,提问作者T. Tharoor
相关产品推荐
相关产品推荐

