15

我正在尝试以 svg 格式保存 ggplot2 图。我没有使用 ggsave 函数,因为该图是作为 knitr 文档的一部分生成的——我指定的绘图设备是“svg”。

问题是原始绘图中的文本元素在 svg 文件中显示为路径,至少在 inkscape 中打开时是这样。svg 的源代码看起来也不包含任何文本。

我的绘图功能在一个单独的文件中定义:

## @knitr plot_histogram
ggplot(mainFrame[complete.cases(mainFrame),]) 
+ geom_boxplot(aes(x=source, y = pPfam, fill = source)) 
+ scale_y_continuous(limits = c(0,1)) 

在 knitr 文档中,我调用该函数并使用“svg”设备保存图像。

```{r plot_histogram, dev = 'svg', fig.width= 7, fig.height=4, fig.show='hold', fig.path="figure/summary"}
```

所以我不确定如何告诉'svg'设备或ggplot2我想在保存svg时保留文本?如果可以解决问题,我也很乐意使用其他图形设备。

提前谢谢了。

4

2 回答 2

16

svg()基础 R 中的CairoSVG()设备和包中的设备都不Cairo支持这一点。所有文本都变成了字形,例如

<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 3.921875 -2.046875 L 3.921875 0.... "/>
</symbol>

我不知道为什么会这样,您可能想向 r-devel 邮件列表提交功能请求。这个问题不是特定于ggplot2/ knitr。它来自 SVG 设备。

更新

OP指出RSvgDevice实际有效,我们可以通过以下方式指定设备:

my_svg <- function(file, width, height) {
  library(RSvgDevice)
  devSVG(file = file, width = width, height = height, bg = "white", fg = "black",
         onefile = TRUE, xmlHeader = TRUE)
}

然后在knitr代码块中,使用选项dev='my_svg'.

于 2013-07-11T08:27:40.410 回答
1

您还可以将绘图保存为 PDF;之后,使用 Inkscape 将它们转换为 SVG(优化:对于小尺寸;并且精度必须大于 4 以获得好的图像)。

于 2014-06-06T12:56:00.413 回答