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]]
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
Oscar Perpiñán Lamigueiro
2013-Mar-22 22:31 UTC
[R-es] Etiquetas interactivas ggplot2 + gridSVG
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
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
Hola, gracias a los dos.
Al final lo he conseguido, aunque todavía me queda alguna cosa.
Los ejemplos de Oscar me funcionan bien pero con ggplot no me funciona
gridToSVG (se queda todo acumulado en la esquina superior izquierda).
He actualizado la versión del gridSVG a la dev (1.0) y ahora me
funciona. El problema es que la generación del SVG por lo que he visto
cambia algunas cosas y
los ejemplos de Oscar no me funcionan bien del todo. En chrome no
funcionan y en firefox si ...
Estuve también hacinendo pruebas con unos ejemplos que encontré creo que
en el github de Oscar sobre qTip (estos me gustan más porque puedes
jugar con el css y darle el toque que necesites) pero tenía el mismo
problema no me acabada ir bien.
Luego he estado mirándome este pdf :
http://www.stat.auckland.ac.nz/~paul/gridSVG/gridsvg.pdf
<http://www.stat.auckland.ac.nz/%7Epaul/gridSVG/gridsvg.pdf> de las
referencias que puso Oscar.
Aquí están los ejemplos dinámicos de ese pdf:
http://www.stat.auckland.ac.nz/~paul/gridSVG/
<http://www.stat.auckland.ac.nz/%7Epaul/gridSVG/> y en concreto lo que
yo quería:
http://www.stat.auckland.ac.nz/~paul/gridSVG/qplotbrowser.svg
<http://www.stat.auckland.ac.nz/%7Epaul/gridSVG/qplotbrowser.svg>
Retocando un poco este código con ayuda del otro ejemplo de Oscar
conseguí lo que quería aunque ahora quiero retocar el aspecto visual
(puede que use qTip o este
http://twitter.github.com/bootstrap/javascript.html#tooltips )
En definitiva, gracias a los dos, copio y pego mi código por si sirve de
algo para alguien:
library("ggplot2")
library("gridSVG")
x <- rnorm(10)
y <- rnorm(10)
id <- seq_along(x)
df <- data.frame(x, y, id)
ggplot(dat=df,aes(x=x,y=y))+geom_point(size=5)
grid.ls()
grobs <- grid.ls()
names <- grobs$name[grobs$type == "grobListing"]
i<-names[grep("points",names)]
grid.garnish(i, onmouseover=paste("showTooltip(evt, ''",
df$id, "'')"),
onmouseout=rep("hideTooltip()",nrow(df)), grep=TRUE,
group=FALSE)
grid.script(filename="tooltip.js")
gridToSVG("qplotbrowser.svg")
browseURL("qplotbrowser.svg.html")
Necesario tener el tooltip.js en la misma carpeta, lo conseguí aquí:
http://www.stat.auckland.ac.nz/~paul/gridSVG/tooltip.js
<http://www.stat.auckland.ac.nz/%7Epaul/gridSVG/tooltip.js>
Saludos y gracias!
PD, mis versiones de paquetes:
ther attached packages:
[1] gridSVG_1.0-0 XML_3.96-0.2 RJSONIO_1.0-2 ggplot2_0.9.3.1.99
El 23/03/13 17:12, daniel escribió:> 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@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@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@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@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
>
>
--
Jorge Ayuso Rejas
[[alternative HTML version deleted]]