【问题标题】:How to preserve text when saving ggplot2 as .svg?将ggplot2另存为.svg时如何保留文本?
【发布时间】:2013-07-07 11:29:56
【问题描述】:

我正在尝试以 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 我想保留文本?如果能解决问题,我也很乐意使用其他图形设备。

非常感谢。

【问题讨论】:

    标签: r svg ggplot2 knitr


    【解决方案1】:

    base R 中的svg() 设备和Cairo 包中的CairoSVG() 设备均不支持此功能。所有的文字都变成了像

    这样的字形
    <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'

    【讨论】:

    • Yihui 感谢您的回答 - 我可能会尝试从 r-devel 列表中请求这个,因为我认为保持文本可选择/可编辑非常有用。
    • 好像已经有支持文本的设备了。它被称为RSvgDevice。这个链接在cran
    • 所以这适用于 knitr 的custom graphics device,例如。 my_svg &lt;- function(file, width, height){ devSVG(file = file, width = width, height = height, bg = "white", fg = "black", onefile=TRUE, xmlHeader=TRUE)} 和设置 dev = 'my_svg'。完美!
    • RSvgDevice 似乎已被弃用,我无法在 R 3.3.1 中安装它(此版本不可用,尽管我关注了stackoverflow.com/questions/25721884/…
    • @TobiO 你可以安装 svglite 包并使用dev = 'svglite'
    【解决方案2】:

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

    【讨论】:

    • 这可能是一条评论。
    • 然而,当它与 ggplot geom_points 一起使用时,pch 不会被保存。所有标准点(我认为 pch 16)都显示为“q”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2015-05-20
    • 2021-09-09
    • 2015-10-26
    相关资源
    最近更新 更多