如何访问DescTools::Desc()生成的绘图对象?解决Rmarkdown PDF图表排版问题
解决DescTools::Desc()绘图在Rmarkdown PDF中并排裁剪的问题
我来帮你搞定这个排版问题!你遇到的核心问题是Desc()函数默认会把三张图并排布局,在PDF里空间不够导致裁剪。而且这个函数是直接把图绘制到图形设备上,不会返回单独的绘图对象,所以没法直接从results里提取调整。下面给你几个实用的解决思路:
思路1:提前设置图形布局(最简单)
Desc()会遵循当前的图形布局参数,所以在调用函数前设置3行1列的布局,就能让三张图自动上下排列:
# 设置3行1列的绘图布局,后续绘图都会按这个排列 par(mfrow = c(3, 1)) # 生成数据并调用Desc() dates <- sample(seq(as.Date('1999/01/01'), as.Date('2021/01/01'), by="day"), 1000) results <- DescTools::Desc(dates) # 可选:恢复默认的1行1列布局,避免影响后续绘图 par(mfrow = c(1, 1))
这样修改后,编织PDF时三张图会垂直排列,不会因为并排被裁剪,完全不需要改动Desc()的返回结果。
思路2:手动提取数据重绘(最灵活)
如果想要更个性化的图表样式,你可以先让Desc()只返回统计数据,不绘图,然后用ggplot2或基础绘图函数自己绘制三张图,完全控制布局:
library(ggplot2) library(gridExtra) dates <- sample(seq(as.Date('1999/01/01'), as.Date('2021/01/01'), by="day"), 1000) # 设置plotit=FALSE,只获取统计结果,不自动绘图 results <- DescTools::Desc(dates, plotit = FALSE) # 1. 绘制直方图+密度曲线 p1 <- ggplot(data.frame(dates), aes(x = dates)) + geom_histogram(aes(y = ..density..), bins = 30, fill = "#69b3a2", color = "white") + geom_density(color = "#333333", size = 1) + labs(title = "日期分布直方图+密度曲线", x = "日期") # 2. 绘制箱线图 p2 <- ggplot(data.frame(dates), aes(y = dates)) + geom_boxplot(fill = "#404080", color = "white") + labs(title = "日期箱线图", y = "日期") # 3. 绘制时间分布散点图 p3 <- ggplot(data.frame(dates), aes(x = dates, y = 1)) + geom_jitter(width = 0, height = 0.1, color = "#ff7f0e") + labs(title = "日期时间分布") + theme(axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank()) # 上下排列三张图,nrow=3指定3行 grid.arrange(p1, p2, p3, nrow = 3)
这种方法的好处是你可以自定义图表的颜色、标题、样式,而且布局完全由你控制,在PDF里不会出现裁剪问题。
思路3:调整Rmarkdown代码块参数(应急方案)
如果只是临时想缓解裁剪问题,不想改代码逻辑,可以在Rmarkdown的代码块里设置fig.width和fig.height参数,缩小宽度、增加高度,给并排的三张图足够空间:
```{r fig.width=8, fig.height=12} dates <- sample(seq(as.Date('1999/01/01'), as.Date('2021/01/01'), by="day"), 1000) results <- DescTools::Desc(dates) results
不过这个方法只是治标,还是推荐前两种方法从根源解决布局问题。 ### 补充说明 为什么你在`results`里找不到绘图对象?因为`Desc()`函数是直接将图形绘制到当前的图形设备中,它的返回值是统计结果列表,并不包含绘图对象(比如ggplot对象),所以没法直接提取调整。 内容的提问来源于stack exchange,提问作者Marcio Rodrigues
相关产品推荐
相关产品推荐

