ploty libreria graficos ggplot geom_bar examples con r ggplot2 plotly r-plotly ggplotly

libreria - r plotly geom_bar



¿Cómo elegir la variable para mostrar en información sobre herramientas al usar ggplotly? (4)

La estética del text no oficial le permite introducir todas las variables que desea (aquí uso dos veces el name para mostrarlo):

require(ggplot2) ggplot(data = d,aes(x = seq, y = value, group = 1, text = paste(''name: '', name, ''</br>name_again: '', name) ))+ geom_line() + geom_point()

Tengo que agregar una estética de group ficticio para que geom_line funcione correctamente como sugirió @UweBlock.

Finalmente, elijo lo que quiero mostrar en la información sobre herramientas (aquí excluí el group ).

require(plotly) ggplotly(, tooltip = c("x", "y", "text"))

Tengo un marco de datos simple:

seq <- 1:10 name <- c(paste0("company",1:10)) value <- c(250,125,50,40,40,30,20,20,10,10) d <- data.frame(seq,name,value)

Y quiero trazarlo de esta manera:

require(ggplot2) ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point()

Ahora quiero utilizar plotly, sobre todo para poder, al pasar el ratón sobre un punto, obtener otra información que no sea el valor, como el nombre de la empresa. Intento esto:

require(plotly) ggplotly()

lo que me da una información sobre herramientas, pero con solo seq y valor. Probé la opción tooltip = pero está especificado que puedes usar la única variable descrita en la estética, y no uso el nombre en mis aes.

¿Alguna solución? Vi que no soy el primero con este problema, pero no he encontrado respuesta trabajando con ggplotly.


No es necesario modificar el objeto plotly como sugiere @ royr2. Solo agrega label = name como tercera estética

ggplot(data = d, aes(x = seq, y = value, label = name)) + geom_line() + geom_point()

y la información sobre herramientas mostrará el name además de la seq y el value .

El archivo de ayuda ggplotly dice acerca del parámetro de tooltip sobre tooltip :

El valor predeterminado, "todas", significa mostrar todas las asignaciones estéticas (incluida la estética "texto" no oficial).

Así que puedes usar la label estética siempre y cuando no quieras usarla para geom_text .

BTW: También he intentado text lugar de label

ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line() + geom_point()

pero luego ggplot2 quejó

geom_path: cada grupo consiste en una sola observación. ¿Necesitas ajustar la estética del grupo?

y trazó solo puntos. Tuve que agregar un grupo ficticio a geom_line para eliminar el problema:

ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line(group = 1) + geom_point()

(Pero tenga en cuenta que si coloca el grupo ficticio como cuarta estética dentro de aes() , aparecerá de forma predeterminada también en la información sobre herramientas).

Sin embargo, me parece que la estética del text no oficial puede ser útil junto con la label si desea que el texto geom_text diferentes cadenas y se muestre en la información sobre herramientas.

Editar para responder a una pregunta en los comentarios: el parámetro de tooltip para ggplotly() se puede usar para controlar la apariencia. ggplotly(tooltip = NULL) suprimirá la información sobre herramientas en absoluto. ggplotly(tooltip = c("label")) selecciona la estética para incluir en la información sobre herramientas.


Sobre la base de la respuesta de @UweBlock, también puede crear una estética ficticia para mostrar múltiples etiquetas en información sobre herramientas. No puedo encontrar dónde está documentado, pero lo descubrí empíricamente. Las variables ficticias se muestran en el orden en que las especificas, pero se da prioridad a las variables predeterminadas (por ejemplo, x e y). Para solucionar esto, puede especificar esas variables en una estética separada, como se muestra a continuación:

library(plotly) p = ggplot(iris, aes(label=Species, label2=Petal.Length, label3=Petal.Width)) + geom_point(aes(Sepal.Length,Sepal.Width)) ggplotly(p)


Tendrás que modificar el plotly object para hacer esto. O usa plot_ly() para crear el gráfico en su lugar ...

EDITAR: Con el lanzamiento de plotly 4.0 la sintaxis cambiará un poco.

seq <- 1:10 name <- c(paste0("company",1:10)) value <- c(250,125,50,40,40,30,20,20,10,10) d <- data.frame(seq,name,value) require(plotly) gg <- ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point() gg <- plotly_build(gg) #OLD: gg$data[[1]]$text <- paste("Seq:", d$seq, "<br>", "Value:", d$value, "<br>", "Company:", d$name) #UPDATED: #Plotly_build creates two separate traces: #One with mode = markers and the other with mode = lines #Hence modify text for the second trace gg$x$data[[2]]$text <- paste("Seq:", d$seq, "<br>", "Value:", d$value, "<br>", "Company:", d$name) gg