使用ggplot2扩大图形

4
我正在使用ggplot2制作一系列线图,并希望将它们保存为JPEG格式。但是,我希望可以使图形变得更大或更高分辨率,这样如果你在查看时放大图形,它们就不会看起来像素化。

以下是代码片段:
library("ggplot2")

p <- ggplot(df1)

p <- p +
  geom_line(aes(time, ee_amt, colour="ee_amt"), size = 2) + 
  geom_point(aes(time, ee_amt, colour="ee_amt"), size = 2)

jpeg("G:\\Auto Parts\\sample.jpg")
  print(p)
dev.off()

4
谢谢夸奖!+1 是对《辛普森一家》中Jebediah Springfield这一角色的致敬。 - mnel
3个回答

10

使用ggsave函数并指定所需的dpi即可保存图形。

library(ggplot2)
df <- data.frame(x = 1:10, y = rnorm(10))
my_plot <- ggplot(df, aes(x,y)) + geom_point(size = 4)
ggsave(my_plot, file="sample.jpg", dpi = 600)

4
我建议使用除了 jpg 之外的其他格式,因为它是一种有损压缩格式。可以考虑使用 pngsvgpdfpostscript 格式(甚至是 tikz),如果需要矢量图形,则缩放不会成为问题。 - mnel
太好了,谢谢。由于某种原因,这无法使用600 dpi(我收到了一个错误消息,上面写着“grDevices :: Unable to start device中的错误”)。但是我将其更改为300 dpi,它可以正常工作。 - aesir

4

将图形保存为PostScript格式,然后使用ImageMagickconvert命令将其转换为所需密度的JPEG格式,例如:

ggsave(my_plot, file="foo.ps")

然后,要制作300 dpi JPEG版本:
$ convert foo.ps -density 300 foo.jpeg

您将获得一个更小的文件,可以在任何分辨率和ImageMagick支持的位图格式下进行渲染。

如果是用于网络,请考虑转换为SVG或PDF格式:

$ convert foo.ps foo.svg

你可以相当容易地将SVG嵌入到iframe中,这有助于与高分辨率位图相比,实现小文件大小的平滑缩放。

0
我不建议使用png()函数,ggsave()或jpeg()是更好的选择。如果要直接控制分辨率,请使用以下代码:
library("ggplot2")

p <- ggplot(df1)

p <- p +
geom_line(aes(time, ee_amt, colour="ee_amt"), size = 2) + 
geom_point(aes(time, ee_amt, colour="ee_amt"), size = 2)

W = 1680
H = 1050

png("test.png", width = W, height = H)
print(p)
graphics.off()

对于jpeg()也应该适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接