2012-12-28 4 views
7

Ich versuche, ein ggplot2 Grundstück mit einem Hyperlink zu liefern:Wie eine ggplot2 Figur mit einem Hyperlink einrichten?

Dies funktioniert:

library(gridSVG) 
library(lattice) 

xyplot(mpg~wt, data=mtcars, main = "Link to R-project home") 
mainGrobName <- grep("main", grid.ls()[[1]], value=TRUE) 
grid.hyperlink(mainGrobName, "http://www.r-project.org") 
gridToSVG("HyperlinkExample.svg") 

Dies nicht:

p = ggplot(mtcars, aes(wt, mpg)) + geom_point()+ labs(title="link") 
print(p) 
mainGrobName <- grep("title", grid.ls()[[1]], value=TRUE) 
grid.hyperlink(mainGrobName, "http://www.r-project.org") 
gridToSVG("HyperlinkExample.svg") 

Irgendwelche Hinweise auf das?

Antwort

4

Ich habe Simon Potter gefragt, einer der Autoren des gridSVG Paket: Hier ist seine (Arbeits-) Antwort:

Ich schlage vor, Sie versuchen, die Entwicklungsversion hier:

http://r-forge.r-project.org/R/?group_id=1025

Es enthält eine Problemumgehung speziell für die Behandlung von gTables (und daher Grafik ggplot2).

So zu versuchen und erhalten Sie Ihr Beispiel eine neue R-Sitzung zu arbeiten, starten und den folgenden Code ausführen:

install.packages("gridSVG", repos="http://R-Forge.R-project.org") 
library(gridSVG) 
library(ggplot2) 
(p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + labs(title="link")) 
titleGrobName <- grep("title", grid.ls(print=FALSE)$name, value=TRUE) 
grid.hyperlink(titleGrobName, "http://www.r-project.org/") 
gridToSVG("HyperlinkExample.svg", "none", "none") 

Der einzige wirkliche Unterschied hier sind die zusätzlichen Parameter zu gridToSVG ​​gegeben(). Dies dient hauptsächlich dazu, die Ausgabe auf nur die SVG-Datei und einen HTML-Wrapper zu reduzieren (andernfalls erhalten Sie auch einige JSON-Daten, was für Ihr Beispiel nicht nützlich ist).

0

Soweit den richtigen mainGrobName diesen Code immer gelingen würde (und nicht die störenden Nebenwirkungen hervorrufen print=FALSE indem):

grep("title", grid.ls(print=FALSE)$name, value=TRUE) 
#[1] "title.2-4-2-4" 

Die Struktur des Objektes Grundstück ist deutlich komplexer als im Gitter Situation und die gridToSVG ​​es nicht standardmäßig erfassen:

grep("title", grid.ls()$name, value=TRUE) 
#-------------------- 
GRID.gTableParent.125 
    background.1-5-6-1 
    spacer.4-3-4-3 
    panel.3-4-3-4 
    grill.gTree.103 
     panel.background.rect.94 
     panel.grid.minor.y.polyline.96 
     panel.grid.minor.x.polyline.98 
     panel.grid.major.y.polyline.100 
     panel.grid.major.x.polyline.102 
    geom_point.points.90 
    panel.border.zeroGrob.91 
    axis-l.3-3-3-3 
    axis.line.y.zeroGrob.113 
    axis 
    axis-b.4-4-4-4 
    axis.line.x.zeroGrob.107 
    axis 
    xlab.5-4-5-4 
    ylab.3-2-3-2 
    title.2-4-2-4 

Dies ist auch interessant Ausgabe, aber ich sehe nicht, wie ich gridToSVG ​​bekommen kann es zu einem nützlichen HTML-Objekt zu konvertieren:

grid.ls(print=pathListing)$name 
Verwandte Themen