gpt4 book ai didi

r - 将 ggplot2 保存为 .svg 时如何保留文本?

转载 作者:行者123 更新时间:2023-12-02 03:13:33 24 4
gpt4 key购买 nike

我正在尝试以 svg 格式保存 ggplot2 图。我没有使用 ggsave 函数,因为绘图是作为 knit 文档的一部分生成的 - 我指定用于绘图的设备是“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时保留文本?如果可以解决问题,我也很乐意使用其他图形设备。

提前非常感谢。

最佳答案

基础 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'

关于r - 将 ggplot2 保存为 .svg 时如何保留文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com