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
相关产品推荐
相关产品推荐

