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