Grafici a violino con menu a tendina con plotly in r
Indice
Questo articolo illustra cos’è una grafico a violino e come creare un grafico a violino in R con plotly con un menu a tendina.
Cosa è un grafico a violino?
Un grafico a violino combina nella stessa visualizzazione un box plot ed una curva di densità. Permette quindi di vedere in un batter d’occhio il minimo, il massimo, il 1°quartile, la media, la mediana, il 3°quartile e la frequenza di più variabili in un frame di dati. La forma della curva di densità del grafico a violino esprime la frequenza delle osservazioni.
Quando un grafico a violino è utile?
I grafici a violino sono utili per eseguire una prima analisi esplorativa delle variabili in un set di dati. Aiutano facilmente a comprendere e confrontare variabili di diverse dimensioni.
Quando il numero di osservazioni è grande, il grafico a violino è un buon strumento. Con molti dati, ad esempio, eseguire un grafico a dispersione (scatter plot) non è pratico.
Grafici a violino in R con plotly con menu a tendina
Con plotly è possibile creare un grafico a violino statico (senza dover usare un server) con un menu a tendina.
Il vantaggio di questo grafico con plotly è che risulta essere interattivo ed è contenuto in un file html statico. Inoltre, in un solo grafico è possibile, come nell’esempio seguente, confrontare più variabili raggruppate secondo un’altra variabile.
Lo svantaggio di utilizzare tale grafico è che se il frame di dati dietro il grafico ha molte osservazioni, il grafico può diventare troppo pesante per essere visualizzato. In questo caso ci sono alcuni opzioni:
- creare un grafico di violino con plotly senza menu a discesa a tendina;
- utilizzare una libreria meno interattiva;
- costruire un’app R shiny con un server che interroga solo i dati rilevanti;
- eseguire un campionamento dei dati prima di disegnare il grafico con plotly.
Di seguito c’è un esempio con menu a tendina con plotly:
Questo è il codice usato per l’esempio qui sopra:
library(plotly)
df <- iris
y_axis_var_names <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
create_buttons <- function(df, y_axis_var_names) {
lapply(
y_axis_var_names,
FUN = function(var_name, df) {
button <- list(
method = 'restyle',
args = list('y', list(df[, var_name])),
label = sprintf('Show %s', var_name)
)
},
df
)
}
violin_plotly <- plot_ly(df, x = ~Species,
y = ~Sepal.Length,
split = ~Species,
type = 'violin', box = list(
visible = T
),
meanline = list(
visible = T
)) %>%
layout(
title = "Violin plots",
yaxis = list(title = ""),
updatemenus = list(
list(
buttons = create_buttons(df, y_axis_var_names)
)
))
violin_plotly
# htmlwidgets::csaveWidget(as_widget(violin_plotly), "violin_plotly.html") # per salvare il grafico come un file html indipendente