如何修改R语言plot()生成的模型诊断图坐标轴与标题
报错原因
- 直接传
xlab/ylab/main参数报错:对lm模型对象调用plot()时,实际执行的是S3方法plot.lm()。该方法内部绘制单张诊断图时,已经给底层绘图函数固定传入了xlab、ylab取值,外部再传同名参数会触发重复传参错误。另外默认显示的图标题(如残差vs拟合值)不是通过main参数控制,而是通过内置的caption参数渲染,因此直接传main也不会生效。 - 出现
"axes" is not a graphical parameter警告:plot.lm内部自行处理坐标轴绘制逻辑,不需要外部传入axes参数,强行传入就会触发该警告。 autoplot()报错:基础ggplot2包没有内置lm类对象的绘图支持,缺少对应S3方法,直接调用就会报对象不支持的错误。
可行方案
方案1:基础绘图实现(无需安装额外拓展包)
调用plot.lm()时传入ann=FALSE关闭所有自动生成的标注(轴标签、标题),该参数是全局绘图控制参数,不会和内部传参冲突,绘图完成后用title()函数手动添加自定义标注即可:
# 绘制第1张诊断图(残差vs拟合值),关闭自动标注 plot(mymodel, which = 1, ann = FALSE) # 手动添加自定义标签和标题 title( main = "你的自定义主标题", xlab = "你的自定义X轴标签(如:模型拟合值)", ylab = "你的自定义Y轴标签(如:残差)" )
如果需要绘制多张诊断图,每绘制完一张对应which序号的图,单独调用title()设置即可。
方案2:ggplot2体系实现(自定义灵活度更高)
先安装并加载ggfortify包,该包提供了lm对象的autoplot支持,生成的是标准ggplot对象,可以直接用labs()修改标签:
# 首次使用先安装依赖包 install.packages(c("ggplot2", "ggfortify")) # 加载包 library(ggplot2) library(ggfortify) # 生成诊断图并自定义标签 autoplot(mymodel, which = 1) + labs( title = "你的自定义主标题", x = "你的自定义X轴标签", y = "你的自定义Y轴标签", caption = "可选:自定义图下说明文字" )
如果需要同时生成多张诊断图,给which传对应序号的向量即可,返回的分面图可以统一修改标签,也可以借助patchwork等包拆分后单独调整每一张的标注。
内容的提问来源于stack exchange,提问作者chromanna
相关产品推荐
相关产品推荐

