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

使用autoplotly为线性模型ggfortify对象生成交互图的报错与显示异常问题

报错与交互异常的核心原因
  • 最初调用未指定which参数时,autoplot(lm模型)默认返回多面板拼接的ggmultiplot类对象,其中部分诊断图元素(如Cook距离等高线标注、特殊格式刻度)使用R的expression类型存储文本。plotly在转换ggplot对象为交互结构时,无法解析expression类型,触发unimplemented type 'expression'报错。
  • 后续指定which = 1:2虽然避开了带expression的图层,消除了解析报错,但返回的仍是多面板的ggmultiplot类对象,autoplotly对这类多面板对象的布局识别存在缺陷,会将不同子图的所有图形元素堆叠在同一个坐标系下,直接导致Q-Q图的点位、参考线位置错位,出现交互显示异常。
可稳定复现的解决方法

核心思路是避开使用ggmultiplot多面板返回值,逐个生成标准单面板ggplot对象,再通过plotly原生逻辑完成交互式转换与排版:

  1. 逐一生成单面板诊断图:每次调用autoplot时将which参数指定为单个值,确保返回标准ggplot对象(而非拼贴对象)。如果需要绘制带Cook距离的诊断图,需将cookd参数设为FALSE,关闭带expression类型的等高线标注。
  2. 对单个标准ggplot对象调用autoplotly完成交互式转换。
  3. 若需要将多个诊断图放在同一个视图内,使用plotly自带的subplot函数完成布局,不要直接使用多面板拼贴对象。

对应代码示例:

library(ggfortify)
library(autoplotly)
library(plotly)

# 构建多元线性回归模型
Model = lm(formula = SWE ~ Mean.Z + Intensity.mean, data = df.mean.swe)

# 单张绘制残差-拟合图,返回标准ggplot对象
p_resid = autoplot(Model, label.size = 3, which = 1) + theme_bw()

# 单张绘制Q-Q图,返回标准ggplot对象
p_qq = autoplot(Model, label.size = 3, which = 2) + theme_bw()

# 分别完成交互式转换
inter_resid = autoplotly(p_resid)
inter_qq = autoplotly(p_qq)

# 使用plotly原生子图函数排版,生成包含两个面板的交互图
subplot(inter_resid, inter_qq, nrows = 1, margin = 0.06)

如果需要扩展其他诊断图(如尺度-位置图、杠杆图),按照上述单图生成逻辑调用即可,涉及Cook距离等高线的图需添加cookd = FALSE参数避免expression类型解析报错。

内容的提问来源于stack exchange,提问作者Ed_Gravy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 16:36:08