我正在尝试以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时如何告诉'svg'设备或ggplot2我想保留文本?如果可以解决问题,我也很乐意使用其他图形设备。
非常感谢提前。
答案 0 :(得分:14)
基础R中的svg()
设备和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'
。
答案 1 :(得分:1)
您也可以将图表保存为PDF格式;之后,使用Inkscape将它们转换为SVG(优化:小尺寸;精度必须大于4才能获得良好的图像)。