2013-08-15 8 views
7

erkannt haben konstruierte ich Dendrogramm in R mit dem Code:R & Inkscape: Beschriftungen in SVG-Grafiken von R exportierten nicht als Text in Inkscape

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)) 

ich das Dendrogramm als SVG-Datei unter Verwendung des retten wollte Code:

install.packages("Cairo") 
library(Cairo) 

svg("plot.svg") 
plot(as.dendrogram(clust)) 
dev.off() 

Hier ist das Problem begann:

Als ich die "plot.svg" in Inkscape importiert (ver: 0.48.4) und ausgewählte jedes Etikett (zB "setosa") nicht erkannt wurde als Text, sondern eher als s ein "benutzerdefiniertes" Objekt. Insbesondere dann, wenn ich einen „Brief“ auf dem Etikett ausgewählt, und prüfen Sie mit dem XML-Editor (Strg + Shift + X) in Inkscape erhielt ich folgende Informationen:

**id**: use117 

    **x**: 142.527344 

    **xlink:href**: #glyph0-8 

    **y**: 442.589844 

Auf der anderen Seite, wenn ich manuell schrieb " setosa“mit‚erstellen und bearbeiten von Textobjekten‘Werkzeug und in XML-Editor überprüft, es zurückgegeben:

**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 

es ist wahrscheinlich, dass Inkscape die Etiketten als Text nach dem Attribute nicht erkennen‚id‘von XML Editor. Daher kann ich weder Schriftart, Größe noch andere Funktionen für Textobjekte in Inkscape ändern.

Hier ist die svg file, dass ich mit dem vorherigen Code und importiert in Inkscape

I vorherigen Schritten mit anderen Versionen von Inkscape sowie R, aber es wäre das gleiche geprüft gemacht. Hier

ist die Frage:

Haben Sie Vorschläge haben, wie ich Etiketten sammeln können als Text anstelle eines „benutzerdefiniert“ Attribut (oder was auch immer es Objekt ist ...), wenn SVG Dateien aus R Import in Inkscape?

UPDATE

@baptiste zum SO thread wo @Oscar Perpinan verbunden vorgeschlagen drei Pakete (gridSVG, SVGAnnotation und RSVGTipsDevice), die SVG manipulieren. Leider konnte keines der vorgeschlagenen Pakete das Problem mit dem Textproblem lösen. Bisher habe ich SO thread gefunden, wo @Mo Sander RSVgDevice-Paket vorgeschlagen, da es Textobjekt statt Glyphen beibehalten kann. Bei der RSvgDevice-Installationsprozedur habe ich festgestellt, dass RSvgDevice nur für 32-Bit-Installationen und R < 2.15.0 verfügbar ist. Andernfalls R Warnmeldung zurückgegeben:

Warning message: 
package ‘RSvgDevice’ is not available (for R version 3.0.1) 

Neben den Anforderungen für ältere R-Versionen, die derzeit nur RSvgDevice kann ein Textobjekt in SVG bewahren.

+0

haben Sie versucht, all die verschiedenen svg Geräte in R zur Verfügung? IIRC einer von ihnen behandelt Text anders als die anderen, zumindest ohne Plotmath. – baptiste

+0

Nein, bitte können Sie einige andere Geräte vorschlagen? Es tut mir leid, aber ich weiß nicht was ist IIRC? –

+1

http://stackoverflow.com/a/7562016/471093 – baptiste

Antwort

0

R verwendet eindeutig nicht die Standard-SVG-Textobjekte zur Herstellung seiner Etiketten. Ich habe keine Idee warum. Ich bin kein R-Benutzer.

Vielleicht verwendet es standardmäßig seine eigene benutzerdefinierte Schriftart, die manuell Glyph-by-Glyph in die Ausgabe einfügt. Verwenden Sie in beiden Fällen die gleiche Schriftart? In Inkscape verwenden Sie Palatino. Ist das, was Sie für die Etiketten in R verwenden?

+0

Tnx für die Antwort @BigBadaboom. Es ist nicht so wichtig, die gleiche Schriftart * per se * zu verwenden, sondern sicherzustellen, dass Inkscape die Schriftfamilie und den Typ installiert hat, die mit der R-Ausgabe übereinstimmen. In Anbetracht dieses Problems, nach [support.rstudio.org] (http://support.rstudio.org/help/discussions/questions/446-whats-the-name-of-the-default-font-type-in-in- R-Studio) Forum-Thread, Rstudio (die ich verwende) hat Standardschrift ** Lucida-Konsole **. Inkscape hat diese Schriftart auch. Palatino war nur ein Beispiel, um zu zeigen, wie Inkscape Textobjekte im Vergleich zu den "benutzerdefinierten" Objekten aus R-Graphen behandelt. –

+0

Hier sind einige Beispiele, die Leute Text von R-Grafiken in Inkscape als Textobjekte behandelt: [1] (http://rforwork.info/2012/04/12/fun-editing-r-graphs-in-inccape/) [2] (http://www.carlisageraine.com/2011/09/26/using-inkscape-to-post-edit-labels-in-r-graphs/) Aber wenn ich es versuchte Mit meinen Daten, oder mit dem obigen Beispiel, war ich nicht in der Lage, R "Text" Objekte in Inkscape zu behandeln. –

+0

Ich stecke ratlos darüber, was passieren könnte. Können Sie Ihre Frage mit einer SVG-Beispieldatei aktualisieren, die Probleme verursacht? –

2

Dies ist ein Fehler in Kairo. Major, aus meiner Sicht.

Die Cairo SVG-Oberfläche (d. H. Das Back-End in Kairo zum Zeichnen auf SVG) unterstützt einfach nicht die "Text" -Tag. Es versteht überhaupt nichts über Strings. Stattdessen platziert es jedes Zeichen (Glyphe) einzeln. Daher ist jedes mit Cairo generierte SVG nicht nützlich, wenn Sie enthaltenen Text mit einem Vektoreditor nachbearbeiten möchten. :(

Die einzige Erwähnung ich auf der kairo Liste gefunden war diese:.

http://lists.cairographics.org/archives/cairo/2011-February/021777.html

2

ich ein bisschen spät, um die Partei bin, aber ich habe mich mit diesem beschäftigt fand ich Ein Trick, um es zum Laufen zu bringen: Zuerst exportiere ich das Plot als PDF anstelle von SVG, da PDF-Schriften von Inkscape erkannt werden

Dies bringt jedoch ein neues Problem mit sich, da der Text oft Buchstabe für Buchstabe definiert wird Sie können die Schriftart ändern, aber der Abstand ist noch definiert und es wird immens nervig. Ich fand, dass es fällig war o Die x-Koordinate wird bei jedem Buchstaben definiert.

Ich schrieb ein Perl-Skript und legte es in this gist, um alle nachlaufenden Koordinaten zu entfernen. Danach kann ich alle gewünschten Schriften bearbeiten. Beachten Sie, dass dies nur für horizontalen Text funktioniert.

Hoffnung, die dieses Problem hilft Ihnen, vor mehr als einem Jahr hatte :)

+0

Ging zurück und getestet es gegen vertikale und schräge Text. Es scheint, dass es auch mit diesen funktioniert. – ZNK

Verwandte Themen