You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:05:03