ggsave
保存图片时,PDF、PNG、JPEG 等不同格式的尺寸设置方式不同,主要是因为它们的单位和分辨率不同。为了让这些格式的图片尺寸保持一致,需要根据分辨率和单位进行换算。以下是具体方法和示例:
1. 理解不同格式的尺寸单位
- PDF:矢量格式,尺寸单位为英寸(inch)或厘米(cm),不受分辨率影响。
- PNG/JPEG:位图格式,尺寸单位为像素(pixel),分辨率(DPI)影响实际显示大小。
例如:
- 如果设置 PNG 的宽度为 800 像素,分辨率为 300 DPI,则实际宽度为 800/300 ≈ 2.67 英寸。
- 如果设置 PDF 的宽度为 8 英寸,则无论分辨率如何,宽度都是 8 英寸。
2. 关键参数
-
width
和height
:设置图像的宽度和高度。 -
units
:设置尺寸单位,默认为英寸(in
),可选cm
或mm
。 -
dpi
:设置分辨率(仅对位图格式有效,如 PNG、JPEG)。
3. 统一尺寸的方法
ggsave
会根据文件格式自动调整尺寸单位:
- 对于 PDF,默认单位是英寸。
- 对于 PNG、JPEG ,默认单位是像素。
因此,如果你直接设置相同的 width
和 height
,PDF、 PNG 、JPEG 的实际大小会不同。
为了让 PDF、PNG、JPEG 的图片尺寸保持一致,可以按照以下步骤设置:
- 确定目标尺寸(例如宽度 8 英寸,高度 6 英寸)。
- 根据分辨率(DPI)将尺寸转换为像素(仅对 PNG/JPEG 有效)。
- 在
ggsave
中设置对应的参数。
4. 示例代码
假设目标尺寸为 8 英寸(宽) × 6 英寸(高),分辨率为 300 DPI:
保存为 PDF
PDF 是矢量格式,直接设置宽度和高度(单位为英寸):
library(ggplot2)
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
# 保存为 PDF
ggsave("plot.pdf", plot = p, width = 8, height = 6, units = "in")
保存为 PNG
PNG 是位图格式,需要将英寸转换为像素:
- 宽度(像素) = 宽度(英寸) × DPI
- 高度(像素) = 高度(英寸) × DPI
# 保存为 PNG
ggsave("plot.png", plot = p, width = 8 * 300, height = 6 * 300, units = "px", dpi = 300)
保存为 JPEG
JPEG 也是位图格式,设置方法与 PNG 相同:
# 保存为 JPEG
ggsave("plot.jpeg", plot = p, width = 8 * 300, height = 6 * 300, units = "px", dpi = 300)
5. 总结设置规则
-
PDF:直接设置
width
和height
,单位为in
或cm
。 -
PNG/JPEG:
- 将目标尺寸(英寸)乘以分辨率(DPI)得到像素值。
- 设置
width
和height
,单位为px
,并指定dpi
。
6. 通用函数
如果你需要频繁保存多种格式,可以编写一个通用函数:
save_plot <- function(filename, plot, width_in, height_in, dpi = 300) {
if (tools::file_ext(filename) == "pdf") {
ggsave(filename, plot = plot, width = width_in, height = height_in, units = "in")
} else {
ggsave(filename, plot = plot, width = width_in * dpi, height = height_in * dpi, units = "px", dpi = dpi)
}
}
# 使用示例
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
save_plot("plot.pdf", p, width_in = 8, height_in = 6)
save_plot("plot.png", p, width_in = 8, height_in = 6)
save_plot("plot.jpeg", p, width_in = 8, height_in = 6)
7. 注意事项
- 分辨率(DPI)越高,PNG/JPEG 文件越大。
- 如果需要在文档或网页中使用图片,建议 PNG/JPEG 的分辨率设置为 300 DPI,PDF 的分辨率可以更高(因为它是矢量格式)。
通过以上方法,可以确保 PDF、PNG、JPEG 等格式的图片尺寸保持一致。