使用Numpy和Matplotlib绘图时曲线不显示的问题排查
问题排查:Matplotlib仅显示坐标轴,曲线不显示
嘿,我来帮你看看代码里的问题——其实核心是数据结构没搞对,导致Matplotlib没法正确解析你的坐标点,咱们一步步拆解:
1. 嵌套列表坑了你的曲线
你创建X和Y的方式把一维numpy数组塞进了列表里,变成了嵌套结构:
X = [] x = np.arange(-1.5,1.6, 0.101) X.append(x) # 现在X是 [array([-1.5, -1.399, ...])],嵌套了一层
plt.plot()需要的是一维序列(比如直接的numpy数组、普通一维列表),而不是这种"列表包数组"的嵌套结构。你把这种结构传进去,Matplotlib没法映射成正确的(x,y)点对,自然画不出曲线。
2. 多余的循环和列表转换完全没必要
你写的for x in X:循环是无效的——因为X里只有一个元素(就是那个numpy数组),你遍历出来的x其实是整个数组,这时候计算y = x**3 -x虽然能得到正确的y数组,但又把它塞进了Y列表里,再次造成嵌套。后面的X = list(X)和Y = list(Y)更是画蛇添足,完全改变不了嵌套的问题。
修正后的代码
把冗余操作都删掉,直接用numpy的矢量化特性来写,简洁又高效:
import numpy as np import matplotlib.pyplot as plt def main(): # 直接生成一维x数组 x = np.arange(-1.5, 1.6, 0.101) # numpy支持直接对整个数组做运算,不需要循环 y = x**3 - x plt.xlabel("x") plt.ylabel("y") # 直接传一维的x和y数组给plot plt.plot(x, y) plt.show() # 别忘了调用这个来显示图像 if __name__ == "__main__": main()
额外注意
- 确保代码里有
plt.show(),你的片段里最后没写,这也是图像可能不显示的常见原因(不过你说能看到坐标轴,应该是实际代码里有,但还是要确认)。 - 尽量别把numpy数组和普通列表混着用,numpy的矢量化运算比循环快得多,代码也更干净。
内容的提问来源于stack exchange,提问作者Pernell Louis-Pierre
相关产品推荐
相关产品推荐

