Mac系统下RMarkdown生成PDF图片过度裁剪问题问询
Mac下RMarkdown编译PDF时图片过度裁剪问题
重现代码
--- title: "Untitled" author: "Richard D. Morey" date: '2022-07-24' output: pdf_document: keep_tex: false fig_crop: true --- ```{r setup, include=FALSE} library(ggplot2) library(patchwork) knitr::opts_chunk$set(echo = FALSE, dev=c('pdf', 'png'))
ggplot(data=mtcars, aes(x=mpg,y=disp)) + geom_point() + annotate( 'text',x=20,y=200,label='hi there 0', color = 'red' ) -> gg0 ggplot(data=mtcars, aes(x=mpg,y=disp)) + geom_point() + annotate( 'text',x=20,y=200,label='hi there 1', color = 'blue' ) -> gg1
gg0
gg1
gg0 + gg1
## 问题现象 开启默认的`fig_crop:true`选项后,Mac环境编译出现以下异常: - 前两张独立ggplot图片被过度裁剪,坐标轴丢失;但导出的PNG图片无此问题 - patchwork拼接生成的`gg0+gg1`仅显示左侧面板,轴标签因过度裁剪丢失 ## 相关影响因素 - 基础R绘图同样出现该问题 - 调换`dev`列表顺序为`c('png', 'pdf')`,优先使用PNG时显示正常但分辨率偏低 - 设置`fig_crop: false`可直接解决问题 - 使用`cairo_pdf`替代默认`pdf`设备可解决问题 - 控制台直接执行`ggplot2::ggsave('test.pdf', plot = gg0, device = 'pdf')`保存无此问题 - 无论是否安装`{magick}`包,问题均存在 - 该问题在Windows及Rstudio.cloud(Ubuntu)环境下未出现 - 已有其他用户遇到同类问题 ## 会话信息 ```r sessioninfo::session_info() ─ Session info ───────────────────────────────────────────────────────── setting value version R version 4.2.1 (2022-06-23) os macOS Big Sur 11.6.7 system x86_64, darwin17.0 ui RStudio language (EN) collate en_GB.UTF-8 ctype en_GB.UTF-8 tz Europe/London date 2022-07-25 ─ Packages ───────────────────────────────────────────────────────────── ! package * version date lib source cli 3.0.0 2021-06-30 [2] CRAN (R 4.2.0) digest 0.6.27 2020-10-24 [2] CRAN (R 4.2.0) evaluate 0.14 2019-05-28 [2] CRAN (R 4.2.0) htmltools 0.5.1.1 2021-01-22 [2] CRAN (R 4.2.0) knitr 1.33 2021-04-24 [2] CRAN (R 4.2.0) renv 0.15.5 2022-05-26 [1] CRAN (R 4.2.0) VP rlang 0.4.11 2022-07-12 [2] CRAN (R 4.2.0) P rmarkdown 2.14 2022-04-25 [?] CRAN (R 4.2.0) rstudioapi 0.13 2020-11-12 [2] CRAN (R 4.2.0) sessioninfo 1.1.1 2018-11-05 [2] CRAN (R 4.2.0) withr 2.4.2 2021-04-18 [2] CRAN (R 4.2.0) P xfun 0.31 2022-05-10 [?] CRAN (R 4.2.0) yaml 2.2.1 2020-02-01 [2] CRAN (R 4.2.0) [1] /Users/richard/Downloads/test_crop/renv/library/R-4.2/x86_64-apple-darwin17.0 [2] /Library/Frameworks/R.framework/Versions/4.2/Resources/library V ── Loaded and on-disk version mismatch. P ── Loaded and on-disk path mismatch.
问题根源
该问题为Mac系统下{rmarkdown}/{knitr}使用默认pdf()设备时的特有兼容性问题,推测与Mac系统自带的PDF裁剪工具配置、或R默认PDF设备生成的文件边界框信息与knitr裁剪逻辑不匹配有关,导致knitr调用裁剪工具时无法正确识别图片有效区域,进而过度裁剪。
解决方案
- 关闭自动裁剪:在YAML输出设置中修改
fig_crop: false,跳过裁剪步骤 - 替换PDF设备:将绘图设备改为
cairo_pdf,可在setup代码块中全局设置:
或在YAML中直接指定:knitr::opts_chunk$set(echo = FALSE, dev=c('cairo_pdf', 'png'))output: pdf_document: dev: cairo_pdf - 手动处理拼接图:若仅patchwork拼接图异常,可手动保存后再导入文档,避免knitr自动裁剪:
随后在文档中用ggplot2::ggsave('patchwork_plot.pdf', plot = gg0 + gg1, device = 'pdf')插入图片
内容的提问来源于stack exchange,提问作者richarddmorey
相关产品推荐
相关产品推荐

