首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在将ggplot2保存为.svg时保留文本?

如何在将ggplot2保存为.svg时保留文本?
EN

Stack Overflow用户
提问于 2013-07-10 02:15:05
回答 2查看 4.4K关注 0票数 15

我正在尝试将ggplot2绘图保存为svg格式。我没有使用ggsave函数,因为该绘图是作为plotting文档的一部分生成的-我为绘图指定的设备是'svg‘。

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

我的绘图函数在一个单独的文件中定义:

代码语言:javascript
复制
## @knitr plot_histogram
ggplot(mainFrame[complete.cases(mainFrame),]) 
+ geom_boxplot(aes(x=source, y = pPfam, fill = source)) 
+ scale_y_continuous(limits = c(0,1)) 

在function文档中,我调用该函数并使用'svg‘设备保存图像。

代码语言:javascript
复制
```{r plot_histogram, dev = 'svg', fig.width= 7, fig.height=4, fig.show='hold', fig.path="figure/summary"}
代码语言:javascript
复制

因此,我不确定如何告诉'svg‘设备或ggplot2,我想保留文本时保存svg?我也很乐意使用另一个图形设备,如果这样可以解决问题的话。

在此之前,非常感谢您。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-11 16:27:40

base R中的svg()设备和Cairo封装中的CairoSVG()设备都不支持此功能。所有文本都会转换为字形,如

代码语言:javascript
复制
<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实际上是工作的,我们可以通过以下方式指定设备:

代码语言:javascript
复制
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'

票数 16
EN

Stack Overflow用户

发布于 2014-06-06 20:56:00

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17555331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档