【发布时间】:2013-08-17 23:52:23
【问题描述】:
我用代码在 R 中构建了树状图:
data(iris)
aver<-sapply(iris[,-5],function(x) by(x,iris$Species,mean))
matrix<-dist(aver)
clust<-hclust((matrix),"ave")
clust$labels<-row.names(aver)
plot(as.dendrogram(clust))
我想使用代码将树状图保存为 svg 文件:
install.packages("Cairo")
library(Cairo)
svg("plot.svg")
plot(as.dendrogram(clust))
dev.off()
问题从这里开始:
当我将“plot.svg”导入 Inkscape(版本:0.48.4)并选择任何标签(例如“setosa”)时,它不会被识别为文本,而是一些“用户定义的”对象。具体来说,当我在标签中选择任何“字母”并使用 Inkscape 中的 XML 编辑器 (ctrl+shift+X) 进行检查时,我获得了以下信息:
**id**: use117
**x**: 142.527344
**xlink:href**: #glyph0-8
**y**: 442.589844
另一方面,当我使用“创建和编辑文本对象”工具手动编写“setosa”并在 XML 编辑器中检查时,它返回:
**id**: text4274
**sodipodi:linespacing**: 125%
**style**: font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino Linotype;-inkscape-font-specification:Palatino Linotype
**transform**: scale(0.8,0.8)
**x**: 176.02016
**xml:space**: preserve
**y**: 596.96674
根据 XML 编辑器中的属性“id”,Inkscape 很可能没有将标签识别为文本。因此,我无法更改字体、大小以及使用与 Inkscape 中的文本对象相关的其他功能。
这是 svg file,我用之前的代码制作并导入到 Inkscape 中
我使用其他版本的 Inkscape 和 R 检查了之前的步骤,但结果是一样的。
问题来了:
在将 svg 文件从 R 导入 Inkscape 时,您有什么建议我可以将标签作为文本属性而不是“用户定义”(或任何对象......)收集吗?
更新
@baptiste 链接到 SO thread,其中 @Oscar Perpiñán 建议使用三个操作 SVG 的包(gridSVG、SVGAnnotation 和 RSVGTipsDevice)。不幸的是,建议的软件包都不能解决文本问题。 到目前为止,我找到了SO thread,其中 @Mo Sander 建议使用 RSvgDevice 包,因为它可以保留文本对象而不是字形。被 RSvgDevice 安装过程卡住了,我发现它 RSvgDevice 仅适用于 32 位安装并且 R
Warning message:
package ‘RSvgDevice’ is not available (for R version 3.0.1)
除了旧 R 版本的要求外,目前只有 RSvgDevice 可以在 SVG 中保存文本对象。
【问题讨论】:
-
您尝试过 R 中提供的所有不同的 svg 设备吗? IIRC 其中一个对文本的处理方式与其他人不同,至少没有情节。
-
不,您能推荐一些其他设备吗?对不起,我不知道什么是 IIRC?
-
@baptiste 我尝试了建议的软件包,但不幸的是没有成功。