多图给出空白 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 中的绘图。 很好发现 - 循环不起作用。当我删除 pdfdev.off() 时,我收到错误消息。所以现在我想这与grid.arrange 通话有关 我建议编辑您的问题,然后专注于循环打印这些图,而不是生成 pdf。也就是说,我不熟悉您正在使用的非 ggplot 包,但在您指向的问题中 p 是一个列表,其中每个项目都是多个图的子列表,需要显示 grid.arrange一起。你的情况也是这样吗?如果gg_miss_varvis_miss 给出单个图,而print(p[[1]]) 可以显示第一个图,则忘记do.call,只需将print(p[[i]]) 放在for 循环中。 轰——这行得通!谢谢你。将do.call 替换为print() 【参考方案1】:

do.callgrid.arrange 替换为print()

每个绘图保存到 PDF 中的单个页面

pdf("plots_test2.pdf", onefile = TRUE)
for (i in seq(length(p))) 
   print(p[[i]])  

dev.off()

【讨论】:

以上是关于多图给出空白 PDF,数据维度错误的主要内容,如果未能解决你的问题,请参考以下文章

Lumen 在发布时给出带有 500 内部错误的空白页

SQL Server 分析服务在维度字符串属性中传递空值和空白值

在http错误500之后,Joomla给出了空白屏幕

Angular 9路由给出无错误的空白页面

使用iTextSharp生成的PDF生成水印给出错误

百度ueditor能不能上传pdf