R, как установить размер ggsave точно

R вопрос.

Я настолько смущен width, height, dpi и unit.

Почему следующие два размера отличаются?

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')

а также

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

Я установил оба размера изображения 5 дюймов * 4 (дюймы). Но почему, когда я изменяю dpi, размер изменяется?

Как понять соотношение между height, width, unit и dpi?

Или как перевести эти четыре параметра в единицу пикселей, что мне легче понять?

Ответ 1

Чтобы понять, почему 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(), размер шрифта будет правильным (например, 10, как в ggsave()). Но если вы поместите их на страницу с неправильным физическим размером, размер шрифта не будет равен 10. Чтобы поддерживать одинаковые физические размеры и размер шрифта при увеличении DPI, вам необходимо увеличить количество пикселей на изображении.