如何用Matplotlib创建带不同标题的subplots?Linear与Polynomial回归分图
解决方案:将线性回归与多项式回归结果分开展示在子图中
没问题!我来帮你把两种回归的结果分别放到独立的子图里,还能给每个子图加上你想要的标题。下面是基于matplotlib和scikit-learn的完整实现示例,你可以直接参考适配自己的代码:
完整代码示例
import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # 生成模拟数据(你可以替换成自己的数据集) np.random.seed(42) X = np.linspace(0, 10, 100).reshape(-1, 1) y = 2 * X + 3 * X**2 + np.random.normal(0, 10, size=X.shape) # --- 1. 训练线性回归模型 --- linear_model = LinearRegression() linear_model.fit(X, y) y_pred_linear = linear_model.predict(X) # --- 2. 训练多项式回归模型 --- poly_features = PolynomialFeatures(degree=2) X_poly = poly_features.fit_transform(X) poly_model = LinearRegression() poly_model.fit(X_poly, y) y_pred_poly = poly_model.predict(X_poly) # --- 3. 创建子图并绘图 --- # 创建1行2列的子图布局,设置整体尺寸 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) # 绘制线性回归子图 ax1.scatter(X, y, color='lightblue', alpha=0.7, label='Original data') ax1.plot(X, y_pred_linear, color='darkred', linewidth=2, label='Linear fit') ax1.set_title('Linear regression', fontsize=14) ax1.set_xlabel('X', fontsize=12) ax1.set_ylabel('y', fontsize=12) ax1.legend() ax1.grid(True, alpha=0.3) # 绘制多项式回归子图 ax2.scatter(X, y, color='lightblue', alpha=0.7, label='Original data') ax2.plot(X, y_pred_poly, color='darkgreen', linewidth=2, label='Polynomial fit (degree=2)') ax2.set_title('Polynomial regression', fontsize=14) ax2.set_xlabel('X', fontsize=12) ax2.set_ylabel('y', fontsize=12) ax2.legend() ax2.grid(True, alpha=0.3) # 自动调整子图间距,避免标题/标签重叠 plt.tight_layout() plt.show()
关键要点解释
- 子图创建:用
plt.subplots(1, 2)创建1行2列的子图布局,返回的ax1和ax2分别对应两个子图的坐标轴对象,所有绘图操作都要针对这两个对象进行(而不是直接用plt.xxx)。 - 标题设置:通过
ax.set_title()为每个子图单独设置标题,完全符合你的需求。 - 布局优化:
plt.tight_layout()会自动调整子图的间距和尺寸,避免标题、坐标轴标签互相重叠,让整体布局更美观。
如果你的代码里已经有模型训练的部分,只需要把原来的绘图代码拆分成两部分,分别对应ax1和ax2的操作就可以啦!
内容的提问来源于stack exchange,提问作者Aleksandar Beat
相关产品推荐
相关产品推荐

