使用plot(effect())绘制预测概率图:如何自定义绘图外观?
解决plot.eff绘图自定义的问题
我来帮你搞定这个plot.eff绘图的自定义需求,你之前遇到的y轴范围异常、置信区间出界的问题,主要是因为没正确启用legacy参数,加上坐标轴的设置格式不对。咱们一步步调整,完美实现你的三个需求:
第一步:保留正常的预测概率计算
你之前的这部分代码没问题,先保留:
prob <- effect(c("age"), M, xlevels = x.list)
第二步:调整绘图代码,实现所有自定义需求
核心是启用legacy=TRUE切换到基础R绘图系统(默认是lattice系统,很多自定义参数不生效),然后结合基础绘图的参数来控制坐标轴和边框:
# 先设置全局绘图参数,指定边框为L型(仅保留x和y轴) par(bty = "l") # 绘制预测概率图 plot(prob, xlab = "Age", # 自定义x轴标签 ylab = "Predicted Probability", # 自定义y轴标签 confint = list(col = "red", alpha = 0.3), # 置信区间样式 lines = list(col = "red"), # 预测线颜色 rug = TRUE, # 显示x轴数据分布的rug图 main = "Predicted Probability vs Age", # 自定义主标题,空标题写main=""即可 legacy = TRUE, # 关键!切换到基础绘图系统,让自定义参数生效 ylim = c(0, 1), # 设置y轴范围为0-1 yaxt = "n" # 禁用默认的y轴刻度,准备手动绘制 ) # 手动绘制自定义y轴刻度,间隔0.1 axis(2, at = seq(0, 1, by = 0.1))
关键参数解释
legacy=TRUE:这是解决你问题的核心。plot.eff默认用lattice绘图系统,很多基础绘图的自定义参数(比如ylim、bty)不生效,启用这个参数后,就可以用熟悉的基础R绘图语法来调整外观了。ylim=c(0,1):直接固定y轴范围在0-1,避免置信区间超出边界。yaxt="n"+axis(2, at=seq(0,1,by=0.1)):先禁用默认y轴,再手动指定刻度位置,完美实现0.1的间隔需求。par(bty="l"):设置绘图边框为L型,自动去掉顶部和右侧的边框,只保留x轴和y轴。
替代方案(不用手动画坐标轴)
如果你不想手动绘制坐标轴,也可以在plot()里通过axes参数结合legacy=TRUE来设置,代码如下:
par(bty = "l") plot(prob, xlab = "Age", ylab = "Predicted Probability", confint = list(col = "red", alpha = 0.3), lines = list(col = "red"), rug = TRUE, main = "", legacy = TRUE, ylim = c(0, 1), axes = list(y = list(at = seq(0, 1, by = 0.1))) )
这种方式也能实现y轴刻度间隔0.1的需求,不过手动绘制的灵活性更高。
这样调整后,你的绘图应该就能完全符合预期了:y轴覆盖0-1范围、刻度间隔0.1,并且只有x和y轴的边框。
内容的提问来源于stack exchange,提问作者Gret-D
相关产品推荐
相关产品推荐

