如何控制pROC绘制ROC曲线时的过大内部边距?
解决pROC绘制ROC曲线时的内部边距问题
我之前也碰到过这个糟心的问题!其实这不是R基础绘图的问题,是pROC::plot.roc()函数默认的坐标轴设置搞的鬼——它默认用了基础绘图的xaxs="r"和yaxs="r"模式,这种模式会自动在你设置的坐标轴范围外预留约4%的空白,所以哪怕你手动指定了xlim=c(1,0),还是会看到明显的边距,让ROC曲线看起来离左上角的完美分类点远了一大截。
下面给你几个亲测有效的解决办法:
方法1:强制坐标轴贴合设置范围
直接在plot()调用里加上xaxs="i"和yaxs="i"参数,这俩是基础绘图的参数,pROC的绘图函数会直接接收使用。"i"模式会让坐标轴严格匹配你设置的xlim和ylim,完全去掉额外的内部留白:
plot(roc(mlabs, yhat, direction="<"), col="blue", lwd=3, main = paste0("ROC Curves for Model ", mname), xlim = c(1, 0), ylim = c(0, 1), xaxs="i", yaxs="i")
方法2:调整外部边距(按需选择)
如果还想进一步控制绘图区域的整体边距(比如减少顶部或右侧的空白),可以先通过par()设置mar参数,再绘图。mar的四个值分别对应底部、左侧、顶部、右侧的边距(单位是文本行):
# 按需修改边距数值,这里是示例设置 par(mar=c(4, 4, 2, 1)) plot(roc(mlabs, yhat, direction="<"), col="blue", lwd=3, main = paste0("ROC Curves for Model ", mname), xlim = c(1, 0), ylim = c(0, 1), xaxs="i", yaxs="i")
方法3:移除默认的AUC标注(可选)
如果pROC自动添加的AUC文本占用了绘图空间,导致曲线位置偏斜,也可以用print.auc=FALSE去掉它,让曲线更居中:
plot(roc(mlabs, yhat, direction="<"), col="blue", lwd=3, main = paste0("ROC Curves for Model ", mname), xlim = c(1, 0), ylim = c(0, 1), xaxs="i", yaxs="i", print.auc=FALSE)
调整之后,ROC曲线就会和你预期的一样,紧贴坐标轴范围,方便直观评估模型的分类性能啦!
内容的提问来源于stack exchange,提问作者AltShift
相关产品推荐
相关产品推荐

