R 准确设置ggsave的大小

R 准确设置ggsave的大小,r,ggplot2,dpi,R,Ggplot2,Dpi,R问题 我被宽度、高度、dpi和单位弄糊涂了 为什么以下两种尺寸不同 ggsave(filename = "foo.png",ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point(size=2, shape=23),width = 5, height = 4, dpi = 300, units = "in", device='png') 及 我将图片的大小都设置为5英寸*4英寸。但是为什么当我更改dpi时,大小会发生变化 如何理解高度、宽度、单位和

R
问题

我被
宽度
高度
dpi
单位
弄糊涂了

为什么以下两种尺寸不同

ggsave(filename = "foo.png",ggplot(mtcars, aes(x=wt, y=mpg)) +
    geom_point(size=2, shape=23),width = 5, height = 4, dpi = 300, units = "in", device='png')

我将图片的大小都设置为5英寸*4英寸。但是为什么当我更改
dpi
时,大小会发生变化

如何理解
高度
宽度
单位
dpi
之间的关系


或如何将这四个参数转换成像素单位,这对我来说更容易理解?

了解DPI为什么重要,请考虑这两个图:

ggsave(filename = "foo300.png", ggplot(mtcars, aes(x=wt, y=mpg)) +
           geom_point(size=2, shape=23) + theme_bw(base_size = 10),
       width = 5, height = 4, dpi = 300, units = "in", device='png')
ggsave(filename = "foo150.png", ggplot(mtcars, aes(x=wt, y=mpg)) +
           geom_point(size=2, shape=23) + theme_bw(base_size = 10),
       width = 10, height = 8, dpi = 150, units = "in", device='png')

生成的文件具有相同的像素尺寸,但每个像素中的字体大小不同。如果您将它们放置在与
ggsave()
调用具有相同物理大小的页面上,则字体大小将是正确的(即,在
ggsave()
调用中为10)。但是如果你把它们放在一个错误的物理大小的页面上,字体大小将不会是10。要在增加DPI的同时保持相同的物理大小和字体大小,必须增加图像中的像素数。

“如何将这四个参数转换为像素单位”设置
units=“in”
,然后您可以将
高度
乘以dpi或
宽度
乘以
dpi
以获得垂直和水平方向的像素。我认为大小必须根据实际大小来设置,以确保字体大小保持一致。如果仅以像素为单位设置大小,则当您将文本放置在具有特定物理大小的页面上时,您不知道文本的大小。如果你将两个示例图以相同的物理大小放在一页上,那么字体大小应该是相同的。@Marius,我同意你的看法。我更喜欢物理尺寸,而不是像素。即使我将物理大小设置为5*4,也会让我感到困惑,因为更改dpi(不是物理大小参数)后,.png打印大小会发生变化。请详细说明*将其放置在与*物理大小相同的页面上,我有点困惑。。。假设我在系统查看器中查看这两个图像,它将在相同大小的窗口中渲染它们。我应该减少一个窗口,使之成为另一个窗口的一半吗?谢谢@Matifou:如果您在保存后查看图像文件,我认为您希望它们位于相同大小的窗口中,因为这样它们在您的显示器上的“物理大小”将相同。DPI是关于图像在文档中实际打印出来后的外观,因此在计算机上查看图像时很难理解。@Marius您能告诉我是否可以在R中增加设备大小吗?我在这里发布了一个问题@Marius,非常好的解释。
ggsave(filename = "foo300.png", ggplot(mtcars, aes(x=wt, y=mpg)) +
           geom_point(size=2, shape=23) + theme_bw(base_size = 10),
       width = 5, height = 4, dpi = 300, units = "in", device='png')
ggsave(filename = "foo150.png", ggplot(mtcars, aes(x=wt, y=mpg)) +
           geom_point(size=2, shape=23) + theme_bw(base_size = 10),
       width = 10, height = 8, dpi = 150, units = "in", device='png')