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
相关产品推荐
相关产品推荐

