You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Matplotlib多次调用plt.plot()绘图的疑问及方法咨询

关于Matplotlib多次plt.plot()的困惑解答

嘿,我懂你的困惑!一开始用Matplotlib的时候,确实容易误以为每次调用plt.plot()都会生成一个全新的图表,但其实不是这样的——Matplotlib的pyplot接口默认是在当前活跃的绘图区域(也就是Axes)上添加曲线,而不是每次都新建独立图表,这和x值是否相同完全没关系。

你看到代码只生成2个绘图,大概率是因为你的代码里只主动创建了2次新的图表(比如调用了2次plt.figure()),所以前几个plt.plot()都叠加在第一个图里,后面的则叠加在第二个图里,而不是每个plt.plot()对应一个独立图表。

怎么用相同x值创建独立图表?

有两种常用的方法,根据你的需求选就行:

方法1:每次绘图前新建一个独立的Figure

如果想要每个曲线都在单独的窗口(或图表文件)里,每次绘图前调用plt.figure()就行,它会创建一个全新的绘图窗口,后续的plt.plot()就会画在这个新窗口里:

# 第一个独立图表:只画数据点
plt.figure()
plt.plot(x_vals, y_vals,'o',label='Data Points')
plt.title("原始数据点")
plt.legend()

# 第二个独立图表:只画拟合线
plt.figure()
plt.plot(x_vals, best_fit, 'r-', label='SVM Regression Line',linewidth=3)
plt.title("SVM拟合回归线")
plt.legend()

# 如果还有第三个曲线,继续新建figure
plt.figure()
plt.plot(x_vals, another_curve, 'g--', label='另一条曲线')
plt.title("其他曲线")
plt.legend()

plt.show() # 显示所有图表

方法2:用子图在同一个窗口里放多个独立绘图

如果想把多个图表放在同一个窗口里对比,用plt.subplots创建多个子图区域,每个子图都是独立的:

# 创建1行3列的子图,设置整体大小
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

# 第一个子图:画数据点
axes[0].plot(x_vals, y_vals,'o',label='Data Points')
axes[0].set_title("原始数据点")
axes[0].legend()

# 第二个子图:画拟合线
axes[1].plot(x_vals, best_fit, 'r-', label='SVM Regression Line',linewidth=3)
axes[1].set_title("SVM拟合回归线")
axes[1].legend()

# 第三个子图:画其他曲线
axes[2].plot(x_vals, another_curve, 'g--', label='另一条曲线')
axes[2].set_title("其他曲线")
axes[2].legend()

plt.tight_layout() # 自动调整子图间距,避免标签重叠
plt.show()

另外补充一句:其实你原来把数据点和拟合线画在同一个图里的用法是很常见的——这样能直观对比数据和模型的拟合效果,Matplotlib默认的叠加行为就是为了方便这种场景~

内容的提问来源于stack exchange,提问作者Huzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:36