Grafici a violino con menu a tendina con plotly in r

post-thumb

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:

  1. creare un grafico di violino con plotly senza menu a discesa a tendina;
  2. utilizzare una libreria meno interattiva;
  3. costruire un’app R shiny con un server che interroga solo i dati rilevanti;
  4. 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 

Condividi su:

DISCLOSURE: Gli articoli possono contenere link di affiliazione. Se acquisti qualcosa tramite uno di questi link, potrei ricevere una piccola commissione, senza alcun costo aggiuntivo per te.