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

Quarto中patchwork无法渲染问题求助

使用patchwork在Quarto中并排绘图报错的解决方案

问题场景

在Quarto脚本中尝试用patchwork将两张ggplot2图形并排绘制时出现报错,但单独运行代码块却能正常执行。

可复现代码

---
title: "Test"
format: html
---
library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))

p1 + p2

报错信息

Quitting from lines 7-14 [unnamed-chunk-1] 
Error in `Ops.data.frame()`:
! '==' only defined for equally-sized data frames
Backtrace:
  1. global .main()
  2. execute(...)
  3. rmarkdown::render(...)
  4. knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
  5. knitr:::process_file(text, output)
     ...
 30. patchwork:::build_patchwork(plot, plot$layout$guides %||% "auto")
 31. base::lapply(x$plots, plot_table, guides = guides)
 33. patchwork:::plot_table.ggplot(X[[i]], ...)
 34. patchwork:::add_guides(gt, guides == "collect")
 36. base::Ops.data.frame(guide_loc, panel_loc)

问题原因

这个错误本质是patchwork与ggplot2版本不兼容导致的。当使用旧版patchwork搭配较新版本的ggplot2时,patchwork在处理图例自动收集(默认guides = "auto")的逻辑时,会出现数据框尺寸不匹配的问题。Quarto渲染时的环境可能和单独运行代码块的环境存在版本差异,或者渲染流程默认触发了图例收集逻辑,进而触发报错。

解决办法

  • 升级patchwork到最新版本:在R控制台运行以下命令,确保patchwork版本与当前ggplot2版本兼容:
    install.packages("patchwork")
    
  • 手动指定图例处理方式:如果暂时无法升级包,可以在拼接图形时显式关闭图例自动收集,修改代码如下:
    p1 + p2 + plot_layout(guides = "keep")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:57:52