New*_*e_R 9 svg text r graph inkscape
我用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))
Run Code Online (Sandbox Code Playgroud)
我想使用代码将树形图保存为svg文件:
install.packages("Cairo")
library(Cairo)
svg("plot.svg")
plot(as.dendrogram(clust))
dev.off()
Run Code Online (Sandbox Code Playgroud)
问题出现了:
当我将"plot.svg"导入Inkscape(版本:0.48.4)并选择任何标签(例如"setosa")时,它不被识别为文本,而是被识别为某个"用户定义"对象.具体来说,当我在标签中选择任何"字母"并使用Inkscape中的XML编辑器(ctrl + shift + X)进行检查时,我获得了以下信息:
**id**: use117
**x**: 142.527344
**xlink:href**: #glyph0-8
**y**: 442.589844
Run Code Online (Sandbox Code Playgroud)
另一方面,当我使用"创建和编辑文本对象"工具手动编写"setosa"并在XML Editor中检查时,它返回:
**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
Run Code Online (Sandbox Code Playgroud)
根据XML编辑器中的属性"id",Inkscape可能无法将标签识别为文本.因此,我无法更改字体,大小以及在Inkscape中使用与文本对象相关的其他功能.
这是svg文件,我用前面的代码制作并导入到Inkscape中
我使用其他版本的Inkscape以及R检查了之前的步骤,但它会是相同的.
这是一个问题:
在将svg文件从R导入Inkscape时,您是否有任何建议我如何将标签作为文本属性而不是"用户定义"(或任何对象...)收集?
UPDATE
@baptiste链接到SO线程,其中@OscarPerpiñán建议操作SVG的三个包(gridSVG,SVGAnnotation和RSVGTipsDevice).不幸的是,所提出的软件包都没有解决文本问题.到目前为止,我找到了SO线程,其中@Mo Sander建议RSvgDevice包,因为它可以保留文本对象而不是字形.由于坚持使用RSvgDevice安装程序,我发现RSvgDevice仅适用于32位安装且R <2.15.0.否则,R返回警告消息:
Warning message:
package ‘RSvgDevice’ is not available (for R version 3.0.1)
Run Code Online (Sandbox Code Playgroud)
除了旧R版本的要求之外,目前只有RSvgDevice可以在SVG中保留文本对象.
R 显然没有使用标准 SVG 文本对象来生成其标签。我不知道为什么。我不是 R 用户。
也许默认情况下它使用自己的自定义字体,手动将字形逐字形插入到输出中。您在这两种情况下使用相同的字体吗?在 Inkscape 中,您使用的是 Palatino。这就是你在 R 中使用的标签吗?