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

如何用Matplotlib函数保存及在子图中使用scikit-learn的RocCurveDisplay绘图?

解决RocCurveDisplay绘图的保存与子图嵌入问题

一、保存ROC曲线绘图

你有两种简单方式保存RocCurveDisplay生成的图:

方法1:通过RocCurveDisplay对象获取Figure

调用plot()时捕获返回的display实例,直接用它的figure_属性调用savefig():

from sklearn.metrics import RocCurveDisplay, roc_curve
import matplotlib.pyplot as plt

# 先计算ROC曲线的fpr、tpr值
fpr, tpr, _ = roc_curve(y_true, y_score)
# 生成ROC曲线并获取display对象
display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()
# 保存图片,可指定分辨率、边界等参数
display.figure_.savefig("roc_curve.png", dpi=300, bbox_inches="tight")

方法2:直接获取当前Figure

如果已经绘制了曲线,直接用Matplotlib的plt.gcf()获取当前活跃的Figure对象,再执行保存:

# 绘制ROC曲线后
plt.gcf().savefig("roc_curve.png")

二、将ROC曲线嵌入Matplotlib子图

完全可行,核心是在plot()方法中指定ax参数,把目标子图的轴对象传进去即可。

示例代码:

from sklearn.metrics import RocCurveDisplay, roc_curve
import matplotlib.pyplot as plt

# 创建2行1列的子图布局
fig, (ax_top, ax_bottom) = plt.subplots(2, 1, figsize=(8, 10))

# 假设有两组模型的预测结果
fpr_model1, tpr_model1, _ = roc_curve(y_true1, y_score1)
fpr_model2, tpr_model2, _ = roc_curve(y_true2, y_score2)

# 在上方子图绘制模型1的ROC曲线
RocCurveDisplay(fpr=fpr_model1, tpr=tpr_model1, name="Model A").plot(ax=ax_top)
ax_top.set_title("ROC Curve - Model A")
ax_top.grid(True)

# 在下方子图绘制模型2的ROC曲线
RocCurveDisplay(fpr=fpr_model2, tpr=tpr_model2, name="Model B").plot(ax=ax_bottom)
ax_bottom.set_title("ROC Curve - Model B")
ax_bottom.grid(True)

# 调整子图间距,避免标题和标签重叠
plt.tight_layout()
# 保存或显示
plt.savefig("subplot_roc.png")
plt.show()

原理说明

RocCurveDisplay的plot()方法本质是对Matplotlib的Axis对象进行绘图操作,通过指定ax参数,就能把曲线绘制到你预先创建的子图轴上,完美整合进Matplotlib的子图系统。而保存绘图的核心是获取到Matplotlib的Figure对象,不管是从display实例的figure_属性,还是通过plt.gcf(),都能调用Matplotlib的savefig()等方法完成保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:22:12