[R-es] Etiquetas interactivas ggplot2 + gridSVG

daniel daniel319 en gmail.com
Sab Mar 23 17:12:13 CET 2013


Jorge mas abajo encontraras mi comentario actualizado con lo enviado
por Oscar, pero primero quiero agradecer a Oscar por los vinculos
enviados, espero hacer buen uso de ellos en el futuro. Pero sigo
teniendo problemas para la integración de ggplot2 y gridSVG. Hace
tiempo (varios meses no me acuerdo donde) lei que Murrell pensaba
sacar una actualizacion de gridSVG para abril del 2013 y que esa
version trabajaba con la que sera la proxima version de R (no la
recientemente publicada 2.15.3 sino la que se espera para abril), por
lo que supongo mis problemas surgen de no utilizar la version correcta
de gridSVG, en mi caso puedo esperar a la alineacion planetaria de las
nuevas versiones. Posiblemente estoy en lo incorrecto y espero, me
interesa, que me corrijan. Mientras tanto del excelente material que
nos envia Oscar, veo un grafico en lattice que probalemente le sirva a
Jorge:

 http://www.stat.auckland.ac.nz/~paul/Talks/Genentech2011/huber.svg.html

El codigo de R es:

http://www.stat.auckland.ac.nz/~paul/Talks/Genentech2011/huber.R

Ojo que hay que tener el siguiente script en el mismo directorio de
huber.R con el nombre de archivo huber,js


highlight = function(i) {
  var point = document.getElementById("point." + i);
  var label = document.getElementById("label." + i);
  point.setAttribute("r", point.getAttribute("r")*2);
  label.setAttribute("visibility", "visible");
}

dim = function(i) {
  var point = document.getElementById("point." + i);
  var label = document.getElementById("label." + i);
  point.setAttribute("r", point.getAttribute("r")/2);
  label.setAttribute("visibility", "hidden");
}

Lo encontre en:

http://www.stat.auckland.ac.nz/~paul/Talks/Genentech2011/huber.js

Ojo hay que agregar la libreria grid. La siguiente es la descripcion
de mi sesion en R

> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
LC_ADDRESS=C               LC_TELEPHONE=C
LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

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

other attached packages:
[1] gridSVG_0.9-1   lattice_0.20-13

loaded via a namespace (and not attached):
[1] tools_2.15.3

Seguramente hay otros ejemplos que se podrian adapatar y usar, pero
este me parecio el mas directo.


Daniel Merino


El día 22 de marzo de 2013 19:31, Oscar Perpiñán Lamigueiro
<oscar.perpinan en gmail.com> escribió:
> Hola,
>
> Yo he utilizado gridSVG con gráficos generados por lattice para obtener
> animación y para añadir "tooltips". Copio a continuación algunos enlaces
> con código y algo de explicación:
>
> - http://oscarperpinan.github.com/spacetime-vis/images/navarraRadiation.svg
>   (código en https://github.com/oscarperpinan/spacetime-vis/tree/master/code/timeHorizontalAxis.R)
> - http://oscarperpinan.github.com/spacetime-vis/images/bubbles.svg
>   (código en https://github.com/oscarperpinan/spacetime-vis/tree/master/code/timeComplementary.R)
> - http://oscarperpinan.github.com/spacetime-vis/airMadrid.html (código
>   en https://github.com/oscarperpinan/spacetime-vis/tree/master/code/thematicMaps.R)
> - http://procomun.wordpress.com/2013/01/04/tooltips-with-r/ (en breve lo
>   modificaré para usar qTip2 en lugar de tooltipster)
> - http://procomun.wordpress.com/2011/11/12/animation-with-gridsvg/
> - http://procomun.wordpress.com/2012/02/23/maps_with_r_3/
>
> Por otra parte, en la web de Murrel hay varios ejemplos, algunos con
> ggplot2:
>
> http://www.stat.auckland.ac.nz/~paul/R/gridSVG/
>
> Saludos.
>
> Oscar.
>
> daniel <daniel319 en gmail.com> writes:
>
>> 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
>>>
>
>
> --
> Oscar Perpiñán Lamigueiro
> Grupo de Sistemas Fotovoltaicos (IES-UPM)
> Dpto. Ingeniería Eléctrica (EUITI-UPM)
> URL: http://procomun.wordpress.com
> Twitter: @oscarperpinan



-- 
Daniel



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