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

