当我为一个数字尝试不同形状的geom_point
时,我注意到生成的PDF文件大小差异很大。我调查并发现:
library(ggplot2)
library(purrr)
library(dplyr)
testplots <- function(df, shp) {
ggplot(df, aes(x, y)) + geom_point(shape = shp, alpha = 0.1)
}
testdf <- expand.grid(x = 1:40, y = 1:40, z = 1:10)
0:25 %>%
walk(., ~ggsave(plot = testplots(testdf, .x),
filename = paste0("./test/", .x, ".pdf")))
这只会为26种不同形状中的每一种生成16,000个点(具有Alpha透明度,也会影响文件大小)的网格,并将每个绘图保存在适当命名的PDF中。
然后我读取每个PDF的文件大小并绘制结果:
data_frame(shp = 0:25) %>%
mutate(size_bytes = map_dbl(shp,
~file.size(paste0("./test/", .x, ".pdf")))) %>%
ggplot(aes(shp, size_bytes, shape = shp)) +
geom_point(size = 5) +
scale_shape_identity()
我的天真猜测是,圆点被编码为类似"draw a circle, x, y, radius"
的向量,而方块则为"draw a box, x1, y1, x2, y2, x3, y3, x4, y4"
。所以我猜多边形越多,文件越大。
事实并非如此!圆圈实际上总是有最大的文件,而正方形是最小的。三角形接近正方形,但随后各种装饰形状更高。
有人有解释吗?
我还尝试使用ggsave(..., device = cairo_pdf)
这些结果,这些结果相似,但不一样: