多图给出空白 PDF,数据维度错误
Posted
技术标签:
【中文标题】多图给出空白 PDF,数据维度错误【英文标题】:Multiple plots gives a blank PDF, data dimension error 【发布时间】:2020-03-10 18:56:01 【问题描述】:尝试将多个绘图绘制到 PDF 时出现错误。我已经使用来自Printing multiple ggplots into a single pdf, multiple plots per page 的代码来创建我的循环,但我不确定是什么导致了错误。
PDF 可以编译,但它只有一页,而且是空白的。我已经重新创建了下面的问题,它似乎是一个数据维度问题,但我不清楚应该如何解决它。可以从绘图查看器手动将绘图保存为 PDF,但它似乎在循环中失败了。我的期望是获得一份 3 页长的 PDF,每页一张图表。
library(ggplot2)
library(naniar)
library(visdat)
library(gridExtra)
p = list()
head(iris)
p[[1]] = gg_miss_var(iris)
p[[2]] = vis_miss(iris)
p[[3]] = vis_dat(iris)
pdf("plots_test2.pdf", onefile = TRUE)
for (i in seq(length(p)))
do.call("grid.arrange", p[[i]])
dev.off()
出现的错误:
Error in `$<-.data.frame`(`*tmp*`, "wrapvp", value = list(x = 0.5, y = 0.5, :
replacement has 17 rows, data has 5
【问题讨论】:
如果你删除pdf
和`dev.off` 行,只有循环工作吗?似乎我们可以将问题缩小到与(a)产生情节(你说这对观众有效),(b)在循环中产生情节(似乎可能是问题的根源......)(c)把pdf 中的绘图。
很好发现 - 循环不起作用。当我删除 pdf
和 dev.off()
时,我收到错误消息。所以现在我想这与grid.arrange
通话有关
我建议编辑您的问题,然后专注于循环打印这些图,而不是生成 pdf。也就是说,我不熟悉您正在使用的非 ggplot 包,但在您指向的问题中 p
是一个列表,其中每个项目都是多个图的子列表,需要显示 grid.arrange
一起。你的情况也是这样吗?如果gg_miss_var
和vis_miss
给出单个图,而print(p[[1]])
可以显示第一个图,则忘记do.call
,只需将print(p[[i]])
放在for 循环中。
轰——这行得通!谢谢你。将do.call
替换为print()
【参考方案1】:
将do.call
和grid.arrange
替换为print()
每个绘图保存到 PDF 中的单个页面
pdf("plots_test2.pdf", onefile = TRUE)
for (i in seq(length(p)))
print(p[[i]])
dev.off()
【讨论】:
以上是关于多图给出空白 PDF,数据维度错误的主要内容,如果未能解决你的问题,请参考以下文章