plot_ly
El paquete plotly permite crear gráficos interactivos en R basados en la librería de JavaScript plotly.js. Los gráficos permiten hacer zoom, desplazarse, pasar el ratón por encima de los elementos para ver sus valores y ocultar grupos haciendo clic en la leyenda, y se pueden incluir en documentos HTML, R Markdown, Quarto o aplicaciones Shiny.
Después de instalar el paquete, usa la función plot_ly para crear un gráfico. Pasa tus datos a data y las variables a x e y con una virgulilla (~) delante de sus nombres. El tipo de gráfico se establece con type y, para los gráficos de tipo scatter, mode indica si dibujar puntos, líneas o ambos.
# install.packages("plotly")
library(plotly)
plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length,
type = "scatter", mode = "markers")
En lugar de establecer el type puedes añadir capas al gráfico con las funciones add_*, como add_markers, add_lines, add_bars, add_boxplot, add_histogram o add_surface. Ten en cuenta que puedes encadenarlas con el operador pipe. En el siguiente ejemplo creamos un gráfico de barras agrupadas con add_bars, asignando los grupos a color y estableciendo barmode = "group" dentro de layout.
df <- data.frame(x = rep(c("Q1", "Q2", "Q3", "Q4"), 3),
group = rep(c("A", "B", "C"), each = 4),
y = c(12, 18, 15, 22, 9, 14, 20, 17, 6, 11, 13, 19))
plot_ly(df, x = ~x, y = ~y, color = ~group,
colors = c("#5E60CE", "#48BFE3", "#72EFDD")) |>
add_bars() |>
layout(barmode = "group")
Asigna una variable a color para colorear los elementos por grupo. La paleta se establece con el argumento colors, que admite un vector de colores o el nombre de una paleta, como "Set2" o "viridis". Se añadirá una leyenda automáticamente.
plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
color = ~Species,
colors = c("#264653", "#E9C46A", "#E76F51"),
type = "scatter", mode = "markers")
Escala de color continua
Si la variable es numérica se utilizará una escala de color continua (colorscale). En este caso puedes pasar a colors el nombre de una paleta o un vector con los colores del degradado.
plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
color = ~Petal.Width, colors = "viridis",
type = "scatter", mode = "markers")
La información que se muestra al pasar el ratón por encima de los elementos se puede personalizar con hovertemplate. Usa %{x} y %{y} para mostrar los valores de los ejes y text para pasar información adicional, que se puede mostrar con %{text}. Añade <extra></extra> para eliminar el nombre de la traza del cuadro.
plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
type = "scatter", mode = "markers",
text = ~Species,
hovertemplate = paste("Especie: %{text}<br>",
"Longitud del sépalo: %{x}<br>",
"Longitud del pétalo: %{y}<extra></extra>"))
El título y los ejes se personalizan con la función layout. Los ejes se configuran con listas que se pasan a xaxis e yaxis, que permiten cambiar el título (title), el rango (range) o el grid, entre otros. Ten en cuenta que para eliminar el título de un eje puedes establecerlo como una cadena vacía.
plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
type = "scatter", mode = "markers") |>
layout(title = "Datos iris",
xaxis = list(title = "Longitud del sépalo", range = c(4, 8.5)),
yaxis = list(title = "", showgrid = FALSE))
La leyenda también se puede personalizar dentro de layout. Pasa una lista a legend para establecer su título con title, mostrarla en horizontal con orientation = "h" y cambiar su posición con x e y. Si quieres eliminarla establece showlegend = FALSE.
plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
color = ~Species,
type = "scatter", mode = "markers") |>
layout(legend = list(title = list(text = "Especie"),
orientation = "h",
x = 0, y = -0.2))
subplot
La función subplot permite combinar varios gráficos de plotly en una misma figura. Usa nrows para establecer el número de filas, heights o widths para el tamaño relativo de cada gráfico y shareX o shareY para compartir los ejes, de modo que al hacer zoom en un gráfico también se hará en el otro.
p1 <- plot_ly(iris, x = ~Sepal.Length, type = "histogram", name = "Histograma",
color = I("#5E60CE"))
p2 <- plot_ly(iris, x = ~Sepal.Length, type = "box", name = "Box plot",
color = I("#48BFE3"))
subplot(p1, p2, nrows = 2, shareX = TRUE, heights = c(0.7, 0.3))
La barra de herramientas (modebar) que se muestra en la esquina superior derecha de los gráficos se puede personalizar con la función config. Puedes eliminarla con displayModeBar = FALSE, quitar el logo de plotly con displaylogo = FALSE o eliminar algunos botones con modeBarButtonsToRemove.
plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
type = "scatter", mode = "markers") |>
config(displaylogo = FALSE,
modeBarButtonsToRemove = c("lasso2d", "select2d"))
Los gráficos se pueden guardar como archivos HTML con la función saveWidget del paquete htmlwidgets, que mantiene la interactividad. Si necesitas una imagen estática puedes usar el icono de la cámara de la barra de herramientas para descargar un PNG o la función save_image, que requiere la librería de Python kaleido.
p <- plot_ly(iris, x = ~Sepal.Length, y = ~Petal.Length,
type = "scatter", mode = "markers")
# Archivo HTML
htmlwidgets::saveWidget(p, "grafico.html", selfcontained = TRUE)
# Imagen estática
save_image(p, "grafico.png")
Si prefieres crear tus gráficos con ggplot2 puedes convertirlos en gráficos interactivos con la función ggplotly. Para mapas interactivos también puedes utilizar el paquete leaflet.
Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad
Ir al sitio
También te puede interesar