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

使用Yellowbrick绘制子图时丢失图例与标题的问题排查

解决Yellowbrick子图仅最后一个显示标题和图例的问题

这个问题在使用Yellowbrick结合Matplotlib子图布局时很常见——核心原因是你重复复用了同一个viz变量,覆盖了之前的可视化实例,而且仅在最后调用了一次poof(),导致只有最后一个图表完成了标题、图例的渲染步骤。

修正思路

  1. 给每个Yellowbrick可视化对象分配独立的变量名,避免实例被覆盖
  2. 对每个可视化对象调用poof(show=False),完成当前子图的渲染(包括标题、图例)但不立即显示画布
  3. 最后统一调用plt.show()展示所有子图,同时用tight_layout()避免元素重叠

修正后的完整代码

import matplotlib.pyplot as plt
from yellowbrick.regressor import FeatureImportances, LearningCurve, ResidualsPlot, PredictionError
from sklearn.linear_model import LinearRegression

# 创建2x2的子图布局
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(14, 10))

# 子图1:特征重要性
viz1 = FeatureImportances(LinearRegression(), ax=ax1)
viz1.fit(X_train, y_train)
viz1.poof(show=False)  # 渲染到ax1,不单独显示

# 子图2:学习曲线
viz2 = LearningCurve(LinearRegression(), scoring='r2', cv=10, ax=ax2)
viz2.fit(X_train, y_train)
viz2.poof(show=False)

# 子图3:残差图(注意:确保clf是已定义的模型实例,比如LinearRegression())
viz3 = ResidualsPlot(clf, ax=ax3)
viz3.fit(X_train, y_train)
viz3.poof(show=False)

# 子图4:预测误差图
viz4 = PredictionError(LinearRegression(), ax=ax4)
viz4.fit(X_train, y_train)
viz4.score(X_test, y_test)
viz4.poof(show=False)

# 自动调整子图间距,避免标题/标签重叠
plt.tight_layout()
# 统一展示所有子图
plt.show()

关键细节说明

  • 独立变量名:viz1、viz2等变量保留了每个Yellowbrick实例的引用,防止之前的图表配置被覆盖
  • poof(show=False):这个参数会触发Yellowbrick的渲染逻辑(添加标题、图例、格式化图表),但不会调用plt.show(),让我们可以在所有子图都配置完成后统一展示
  • tight_layout():自动调整子图之间的间距,避免不同子图的标题、坐标轴标签互相遮挡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:25:01