[R-es] Etiquetas interactivas ggplot2 + gridSVG

daniel daniel319 en gmail.com
Vie Mar 22 22:40:46 CET 2013


Jorge,

Mi experiencia no coincide con tu objetivo pero por lo que sirva te la cuento.

Normalmente uso ggplot2 para gráficos planos inanimados. Si recuerdo
bien ggplot2 te permite guardar el gráfico como svg, si tienes
experiencia en javascript y html podrías trabajar sobre el archivo svg
producido por ggplo2 y ver que pasa con la animación del etiquetado.
No lo he hecho y tampoco lo he intentado.

Cuando necesité lo que buscas use el paquete SVGAnnotation. A mi me
funciona el siguiente script (ver el sessionInfo al final y lo veo en
Chrome, puede ser que en IE tengas problemas con versiones no
actualizadas):

library("XML")
library("SVGAnnotation")

# Create the basic plot
doc = svgPlot(plot(mpg ~ wt, mtcars,
                   main = "Motor Trend Car Road Tests", pch=19,
                   col= "#377EB8"))

 # Annotate title and axes
ax = getAxesLabelNodes(doc)

 # Add link from title to motor trend website
addLink(ax$title, "http://www.motortrend.com", addArea = TRUE)

 # Add tooltips to the x, y axes
tips = c("Weight in units of lb/1000", "Miles per US gallon")
addToolTips(ax[c("xaxis", "yaxis")], tips)

addToolTips(doc, apply(mtcars, 1, function(x)
                       paste(names(mtcars), x, sep = " = ",
                                   collapse = ", ")))


saveXML(doc, "../mt_tips.svg")


depth.col = gray.colors(100)[cut(quakes$depth, 100, label=FALSE)]
depth.ord = rev(order(quakes$depth))
doc = svgPlot(
 plot(lat ~ long, data = quakes[depth.ord, ],
      pch = 19, col = depth.col[depth.ord],
      xlab = "Longitude", ylab="Latitude",
      main = "Fiji Region Earthquakes") )


ax = getAxesLabelNodes(doc)


addToolTips(ax[c("xaxis", "yaxis")], c("Degrees east of the prime meridean",
            "Degrees south of the equator"), addArea = TRUE)


usgs = "http://earthquake.usgs.gov/eqcenter/recenteqsww/"
region = "Maps/region/S_Pacific.php"
addAxesLinks(ax$title, paste(usgs, region, sep = ""))


addToolTips(doc,
             apply(quakes[depth.ord, ], 1,
                    function(x)
                       paste(names(quakes), x,
                             sep = " = ", collapse = ", ")))


# This is a relative path to the CSS file.
# The default path will be absolute.
#addCSS(doc, css = "../../inst/CSS/RSVGPlot.css")


saveXML(doc, "quakes_tips.svg")

 > sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Spanish_Argentina.1252  LC_CTYPE=Spanish_Argentina.1252
   LC_MONETARY=Spanish_Argentina.1252 LC_NUMERIC=C
[5] LC_TIME=Spanish_Argentina.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] SVGAnnotation_0.93-1 Cairo_1.5-2          XML_3.96-0.2


Claro que lo anterior implica hacer nuevamente en gráfico. Si vas a
tomarte ese trabajo investiga las opciones de googleVis ya que de
todas formas lo vas a publicar en la Web. A mi me han funcionado muy
bien:

https://developers.google.com/chart/interactive/docs/gallery/scatterchart

http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis.pdf
(páginas 29 y 30 para la alternativa shiny)

Suerte, y espero interesado en ver si alguien tiene solucionado el
asunto usando gggplot2 y obteniendo un svg con etiquetas dinámicas.

Daniel Merino


El día 22 de marzo de 2013 16:09, Jorge Ayuso Rejas
<jayusor en gmail.com> escribió:
>
> Buenas tardes,
>
> Estoy intereaso en  añadir a un gráfico que ya tengo hecho con gglplot2
> y que voy a publicar en una web un poco de interacción.
> Simplemente que al pasar el ratón por los puntos del gráfico se muestre
> la información del punto.
>
> Por lo que he podido investigar la manera es convertir el gráfico en un
> svg y con ayuda de javascript añadir esta función, aquí hay un ejemplo
> que no soy capaz de producir, consigo el svg pero no tiene nada de acción:
>
> http://stackoverflow.com/questions/11134379/interactive-point-labels-with-gridsvg-and-ggplot2-v-0-9-0
>
> Por lo que he podido investigar buscando por internet hay problemas con
> versiones de ggplot y demás.
>
> También he intentado un paquete llamado SVGAnottaion pero tampoco he
> conseguido nada, aquí una web con ejemplos:
> http://www.omegahat.org/SVGAnnotation/SVGAnnotationPaper/SVGAnnotationPaper.html
>
> Aquí lo que me gustaría conseguir (con un gráfico de ggplot2) sacado de
> esta web:
> http://www.omegahat.org/SVGAnnotation/SVGAnnotationPaper/XMLExamples/quakes_tips.svg
>
>
> Por lo que creo me vendría mejor usar el primero de los paquetes gridSVG
> que parece funcionar mejor con ggplot y además tener más futuro.
>
> ¿Alguien tiene conocimientos de esto? Muchas gracias de antemano y buen
> fin de semana.
>
>
> --
> Jorge Ayuso Rejas
>
>
>         [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Daniel



Más información sobre la lista de distribución R-help-es