在R中将png图写入pdf文件
Posted
技术标签:
【中文标题】在R中将png图写入pdf文件【英文标题】:writing png plots into a pdf file in R 【发布时间】:2013-09-22 01:00:22 【问题描述】:我必须创建一堆包含大量数据点的图表。到目前为止,我一直在通过将它们全部绘制到一个 pdf
-file 中来做到这一点:
pdf("testgraph.pdf")
par(mfrow=c(3,3))
for (i in 2:length(names(mtcars)))
plot(mtcars[,1], mtcars[,i])
dev.off()
但是,如果有很多数据点,pdf
文件就会变得太大。因为我对出色的质量不感兴趣,所以我不在乎我的情节是否是矢量图形。所以我想将这些图创建为png
,然后将它们插入到pdf
文件中。除了创建R
图表并将它们插入pdf
和knitr
之外,还有其他方法吗(我认为对于这样一个简单的工作来说太乏味了)?
【问题讨论】:
我写了一些代码in this answer可能会感兴趣。 @Roland 感谢您的有趣建议。 【参考方案1】:你可以
-
为每个绘图创建 .png 文件
使用
png
包重新读取这些内容并
使用grid.arrange
将它们绘制成pdf
library(png)
library(grid)
library(gridExtra)
thePlots <- lapply (2:length(names(mtcars)), function(i)
png("testgraph.png")
plot(mtcars[,1], mtcars[,i])
dev.off()
rasterGrob(readPNG("testgraph.png", native = FALSE),
interpolate = FALSE)
)
pdf("testgraph.pdf")
do.call(grid.arrange, c(thePlots, ncol = 3))
dev.off()
【讨论】:
由于某种原因,library(png)
行终止了帖子其余部分的格式...
太好了,谢谢,这正是我想做的!然而,令我惊讶的是,事实上生成的pdf
文件变得更大了……没想到会这样。我想我将不得不研究其他选项以减少此处建议的地块大小。
@BenBarnes:您遇到的格式问题描述为here。
我使用这种技术绘制多个地图,在这种情况下,生成的 pdf 比直接绘制到 pdf 小得多。在您的情况下,在绘图之前降低数据复杂性听起来是个好主意。【参考方案2】:
如果问题的根源是图中的点太多,那么您可能需要考虑使用六边形分箱而不是常规散点图。您可以使用 bioconductor 的 hexbin 包,或者 ggplot2 包也具有六边形分箱功能。无论哪种方式,在直接创建 pdf 文件时,您都可能会获得更有意义的绘图以及更小的文件大小。
【讨论】:
你是对的,这可能是另一种选择,谢谢!我必须尝试这里的建议,才能找到最适合我的数据的方法。【参考方案3】:您可以使用ImageMagick将PNG文件转换为PDF
for i in *.png
do
convert "$i" "$i".pdf
done
并将生成的文件与pdftk 连接起来。
pdftk *.png.pdf output all.pdf
【讨论】:
谢谢,但我想坚持R
而不使用任何其他软件。以上是关于在R中将png图写入pdf文件的主要内容,如果未能解决你的问题,请参考以下文章
R - 如何在 R 中读取多个 png 文件并编织成 pdf?
R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件
R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件