Windows环境下ggplot2+CairoSVG导出SVG时点尺寸偏大的问题求助
解决CairoSVG保存ggplot2散点图时点尺寸放大的问题(Windows系统)
这个问题我之前也碰到过——用CairoSVG保存ggplot2的散点图时,点的尺寸总是比R绘图窗口里显示的大,原因其实是DPI基准不一致:
- ggplot的
size参数是以72 DPI为标准定义的(1pt = 1/72英寸) - Windows系统下CairoSVG默认使用96 DPI(和系统屏幕的DPI匹配),这就导致点的尺寸被自动放大了
96/72 ≈ 1.333倍
下面给你两个可行的解决方案,都能保留CairoSVG对自定义字体的良好支持:
方案1:修改CairoSVG的DPI参数匹配ggplot基准
直接在调用CairoSVG时指定dpi=72,让输出的SVG和ggplot的尺寸基准一致:
library(ggplot2) my_plot <- ggplot(mpg, aes(cty, hwy)) + geom_point(size = 0.5) # 查看R窗口中的效果 x11(width = 6, height = 6) print(my_plot) # 保存SVG时指定dpi=72 Cairo::CairoSVG(file = "my_plot.svg", width = 6, height = 6, dpi = 72) print(my_plot) dev.off()
这个方法不需要调整ggplot的任何参数,直接让CairoSVG的输出匹配R绘图窗口的显示效果,最省心。
方案2:按比例缩小ggplot中点的size值
如果因为某些原因不能修改DPI参数,可以手动计算缩放比例,把ggplot的size值乘以72/96=0.75:
library(ggplot2) # 原始size是0.5,乘以0.75得到适配CairoSVG的尺寸 my_plot <- ggplot(mpg, aes(cty, hwy)) + geom_point(size = 0.5 * 0.75) x11(width = 6, height = 6) print(my_plot) Cairo::CairoSVG(file = "my_plot.svg", width = 6, height = 6) print(my_plot) dev.off()
这样保存后的SVG中点的尺寸就会和R窗口里显示的一致了。
额外提示
如果后续需要调整绘图尺寸,只要保持DPI参数或者缩放比例的一致性,就能避免点尺寸出现偏差。而且这两种方法都不会影响CairoSVG对自定义字体的加载和渲染,完全符合你的需求。
内容的提问来源于stack exchange,提问作者yenats
相关产品推荐
相关产品推荐

