使用plot_annotation()时performance::check_model()重复绘图问题求助
问题描述
使用performance::check_model()生成模型诊断图后,添加patchwork::plot_annotation()标题时,无论输出到PDF还是绘图窗口,都会出现重复绘图:先打印无标题的图,再打印带标题的图。即使移除print()调用,问题依旧存在。
示例错误代码:
library(lme4) library(tidyverse) library(patchwork) library(performance) library(see) tCars <- lmer(mpg ~ qsec + (1 | cyl) + hp, mtcars) # 错误写法1:直接嵌套调用+print() print(plot(check_model(tCars, panel = TRUE, size_dot = 1, size_line = 0.5, base_size = 8, size_title = 10, size_axis = 6)) & plot_annotation(title = "best Cars")) # 错误写法2:移除print()仍重复出图 plot(check_model(tCars, panel = TRUE, size_dot = 1, size_line = 0.5, base_size = 8, size_title = 10, size_axis = 6)) & plot_annotation(title = "best Cars")
解决方法
核心是先将check_model()的结果保存为变量,再调用绘图方法,避免触发两次绘图逻辑:
library(lme4) library(tidyverse) library(patchwork) library(performance) library(see) tCars <- lmer(mpg ~ qsec + (1 | cyl) + hp, mtcars) # 步骤1:保存check_model结果到变量 model_diag <- check_model(tCars, panel = TRUE, size_dot = 1, size_line = 0.5, base_size = 8, size_title = 10, size_axis = 6) # 步骤2:对变量调用plot,再添加标题 plot(model_diag) + plot_annotation(title = "best Cars")
原因说明
直接嵌套plot(check_model(...))时,check_model()的内部逻辑会先自动渲染一次无标题的诊断图,之后返回的patchwork对象再被plot()处理并添加标题,导致两次输出。先将结果存为变量,跳过了自动渲染的步骤,仅在调用plot()时生成一次带标题的完整图。
内容的提问来源于stack exchange,提问作者MrSwaggins
相关产品推荐
相关产品推荐

