1

我正在生成多面图 ( ggplot/ ggsave) 作为 SVG 文件,以在将转换为 PDF 的 WORD(Office 365、Windows 10)文档中使用。

作为 WORD 限制的一种解决方法,我希望将 SVG 尺寸增加 10 倍(例如,16.5 厘米的宽度变成 165 厘米,如后所述)。当我以正常尺寸(即 16.5 厘米)保存时,没有问题,但使用较大尺寸(即 165 厘米)时,SVG 文件会丢失绘图的细节和元素。

这是一个工作示例:

library(ggplot2)

d <- data.frame(
  group = rep(1:12, each = 4),
  x = factor(1:4),
  y = sample(8:15, size = 48, replace = TRUE)
)


ggplot(d, aes(x = x, y = y, group = 1))+
  geom_area(size = 0.5/.pt, alpha = 0.5) +
  facet_wrap(~group, ncol = 3)

ggsave("SO_example-normaldim.svg", width = 16.5, height = 22, units = "cm", device = "svg")

这产生(转换为位图,所以我可以上传它):

尺寸符合最终展览需求的 SVG 图

此时 R 或 ggplot2 没有问题。导入WORD,一切看起来都很棒。

但是,当 WORD 文档导出为(或另存为或打印到)PDF 时,线条(区域的顶部边框)的粗细(大小)会增加。

这是由 WORD 引起的,它根据原始图像尺寸将最小线条粗细设置为 96 dpi 时的 1 个像素。建议的解决方案是将 SVG 尺寸设置为显着更大(即,因子 10 或 100),然后在将图像插入 WORD 后调整其大小。[ 1 ]

<SVG>您可以使用文本编辑器在 SVG 文件的标签中手动更改尺寸。我已经对此进行了测试,并且该解决方案有效。PDF 版本中的线条粗细显示正确,并且由于 SVG 文件是矢量图形,将尺寸乘以 10 甚至 100 不会影响文件大小(除了添加文本来设置尺寸,这是微不足道的)。

这是一个相对容易的修复;但是,最好省略手动修改步骤,只需将 SVG 保存为 R 中的较大尺寸。

下面应该保存 SVG 图的 10 倍大尺寸的版本(注意添加limitsize = FALSE是必要的,因为图像现在在任一尺寸上都大于 50 英寸)。

ggsave("SO_example-largedim.svg", width = 16.5*10, height = 22*10, # 10 x wider, 10 x taller
       units = "cm", device = "svg", limitsize = FALSE)
# Note: increasing the dpi by 10x, instead of the dimensions, does nothing in this example 
#       the saved SVG is the same dimensions as the original attempt above

这不会按预期保存。生成的图像(再次转换为位图并缩放以供上传)如下所示:

尺寸因子为 10 的 SVG 图

缺少刻面条、轴标签/文本、网格线和 alpha 设置。

这是什么原因造成的?有没有更好的方法来缩放图像尺寸同时保留绘图的外观?

4

0 回答 0