2012-12-28 1 views
7

usiłuję przedstawić wykres ggplot2 z hiperłącze:Jak urządzić rysunek ggplot2 za pomocą hiperłącza?

działa następująco:

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

Nie:

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

żadnych wskazówek na ten temat?

Odpowiedz

4

Poprosiłem Simon Potter, jeden z autorów pakietu gridSVG: Oto jego (pracy) odpowiedź:

Proponuję wypróbować wersję rozwojową tutaj:

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

Zawiera obejście przeznaczone specjalnie do obsługi tabel gTables (a zatem grafiki ggplot2).

Tak, aby spróbować i dostać przykład do pracy, rozpocząć nową sesję R i uruchom następujący kod:

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

Jedyną różnicą są dodatkowe parametry podane gridToSVG ​​(). Ma to głównie na celu zmniejszenie wielkości wyjściowej tylko do pliku SVG i opakowania HTML (w przeciwnym razie otrzymasz również dane JSON, które nie są przydatne w twoim przykładzie).

0

Jeśli chodzi o uzyskanie prawidłowego mainGrobName ten kod uda (a nie tworzyć niechciane skutki uboczne, ustawiając print=FALSE):

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

Struktura obiektu fabuła jest wyraźnie bardziej złożona niż w kratę sytuacja i gridToSVG ​​nie uchwycić go domyślnie:

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 

to także ciekawy wyjście, ale nie widzę w jaki sposób mogę uzyskać gridToSVG ​​aby przekształcić go w użyteczny przedmiot HTML:

grid.ls(print=pathListing)$name