Grafico a barre e istogramma in R con esempio

โšก Riepilogo intelligente

I grafici a barre e gli istogrammi in R sono costruiti con ggplot2, utilizzando geom_bar() per i conteggi categorici e geom_histogram() per le distribuzioni continue. Questa procedura guidata personalizza il colore, il gruppoping, impilamento, orientamento, binning ed etichette all'interno della barra sul dataset mtcars.

  • ๐Ÿ“Š Elemento distintivo fondamentale: Un grafico a barre riassume una variabile categoriale, mentre un istogramma raggruppa una singola variabile continua in intervalli.
  • ๐Ÿงฑ Grammatica della grafica: Ogni grafico combina un dataset e una mappa aes()pinge un oggetto geometrico unito con il segno piรน.
  • ๐ŸŽจ Controllo del colore: Inserisci il riempimento all'interno di geom_bar() per un colore uniforme e all'interno di aes() per colorare le barre per gruppo.
  • ๐Ÿ“ Regolazioni degli oggetti: position = โ€œfillโ€ converte i conteggi in percentuali e position_dodge() posiziona le barre raggruppate una accanto all'altra.
  • ๐Ÿ”ข Rappresentazione grafica dei valori: Passa stat = โ€œidentityโ€ quando lโ€™asse y contiene giร  una statistica calcolata come la media di un gruppo.
  • ๐Ÿ“ Raggruppamento dell'istogramma: Imposta bins o binwidth in geom_histogram(), perchรฉ il valore predefinito di 30 bin raramente si adatta ai dati.

Istogramma del grafico a barre in R

Cos'รจ un grafico a barre in R?

Un grafico a barre รจ un ottimo modo per visualizzare le variabili categoriali sull'asse x. Questo tipo di grafico denota due aspetti nell'asse y.

  1. Il primo conta il numero di occorrenze in ciascun gruppo.
  2. Il secondo grafico mostra una statistica riassuntiva (minimo, massimo, media e cosรฌ via) di una variabile sull'asse y.

Utilizzerai il dataset mtcars, che contiene le seguenti variabili:

  • cil: numero del cilindro dell'auto. Variabile numerica
  • am: Tipo di trasmissione. 0 per automatico e 1 per manuale. Variabile numerica
  • mpg: miglia per gallone. Variabile numerica

Poichรฉ un istogramma รจ molto simile a un altro, vale la pena chiarire la differenza prima di scrivere qualsiasi codice.

Grafico a barre vs. istogramma in R: differenze principali

I due grafici si assomigliano e vengono costantemente confusi. Rispondono a domande diverse e utilizzano oggetti geometrici diversi.

Criteri Grafico a barre Istogramma
variabile dell'asse X Categoriale o fattoriale Continuo e numerico
Cosa rappresenta un bar Una categoria Un intervallo, o bin, di valori
Spazi tra le barre Sรฌ, le categorie sono separate No, i bidoni sono adiacenti
Ordine del bar Puรฒ essere riorganizzato liberamente Fissato dalla scala numerica
Domanda con risposta Come si confrontano i gruppi? Come viene distribuita una variabile?
oggetto ggplot2 geom_bar() geom_histogram()

La regola generale: se riordinando le barre avrebbe ancora senso, hai un grafico a barre. Se riordinandole ne distruggerebbe il significato, hai un istogramma. Per i riepiloghi basati sui quartili della stessa variabile continua, usa un trama a scatola.

Come creare un grafico a barre in R

Per creare il grafico in R, puoi utilizzare la libreria ggplot che crea grafici pronti per la pubblicazione. La sintassi di base di questa libreria รจ:

ggplot(data, mapping = aes()) +
geometric object 

arguments: 
data: dataset used to plot the graph 
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common objects are:

- Point: `geom_point()`
- Bar: `geom_bar()`
- Line: `geom_line()`
- Histogram: `geom_histogram()` 

Questo tutorial si concentra sull'oggetto geometrico geom_bar(), che disegna il grafico a barre, e su geom_histogram() per i dati continui.

Grafico a barre: conteggio

Il tuo primo grafico mostra la frequenza del cilindro con geom_bar(). Il codice seguente รจ la sintassi piรน elementare.

library(ggplot2)
# Most basic bar chart
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

Code Spiegazione

  • Passi il set di dati mtcars a ggplot.
  • All'interno dell'argomento aes(), si imposta l'asse x sulla variabile fattoriale cyl
  • Il segno + significa che vuoi che R continui a leggere il codice. Rende il codice piรน leggibile rompendolo.
  • Usa geom_bar() per l'oggetto geometrico.

Produzione:

Grafico a barre: conteggio

Note:: assicurati di convertire le variabili in un fattore altrimenti R tratta le variabili come numeriche. Guarda l'esempio qui sotto.

Grafico a barre: conteggio

Personalizza il grafico

รˆ possibile passare quattro argomenti per personalizzare il grafico:

- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar	

Cambia il colore delle barre

Puoi cambiare il colore delle barre. Tieni presente che i colori delle barre sono tutti simili.

# Change the color of the bars
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar(fill = "coral") +
    theme_classic()

Code Spiegazione

  • I colori delle barre sono controllati dalla mappa aes()ping all'interno dell'oggetto geometrico (ovvero non in ggplot()). รˆ possibile modificare il colore tramite gli argomenti di riempimento. In questo caso, si sceglie il colore corallo.

Produzione:

Cambia il colore delle barre

Puoi usare questo codice:

grDevices::colors()

per vedere tutti i colori disponibili in R. Ci sono circa 650 colori.

Cambia l'intensitร 

Puoi aumentare o diminuire l'intensitร  del colore delle barre

# Change intensity
ggplot(mtcars,
        aes(factor(cyl))) +
    geom_bar(fill = "coral",
        alpha = 0.5) +
    theme_classic()

Code Spiegazione

  • Per aumentare o diminuire l'intensitร  della barra, รจ possibile modificare il valore di alpha. Un valore di alpha elevato aumenta l'intensitร , mentre un valore di alpha basso la riduce. Il valore di alpha varia da 0 a 1. Con un valore di 1, il colore corrisponde esattamente alla tavolozza; con un valore di 0, la barra รจ invisibile. In questo caso, si sceglie alpha = 0.5.

Produzione:

Cambia l'intensitร 

Colora per gruppi

Puoi cambiare i colori delle barre, ovvero un colore diverso per ogni gruppo. Ad esempio, la variabile cyl ha tre livelli, quindi puoi tracciare il grafico a barre con tre colori.

# Color by group
ggplot(mtcars, aes(factor(cyl),
        fill = factor(cyl))) +
    geom_bar()

Code Spiegazione

  • L'argomento `fill` all'interno della funzione `aes()` cambia il colore della barra. Il colore si cambia impostando `fill` sulla variabile dell'asse x. Nel tuo esempio, la variabile dell'asse x รจ `cyl`; `fill = factor(cyl)`

Produzione:

Colore per gruppi

Aggiungi un gruppo nelle barre

Puoi ulteriormente dividere l'asse y in base a un altro livello di fattore. Ad esempio, puoi contare il numero di trasmissioni automatiche e manuali in base al tipo di cilindro.

Procederai come segue:

  • Passaggio 1: crea il frame di dati con il set di dati mtcars
  • Fase 2: etichetta la variabile am con auto per la trasmissione automatica e man per la trasmissione manuale. Converti am e cyl come fattore in modo da non dover usare factor() nella funzione ggplot().
  • Passaggio 3: tracciare il grafico a barre per contare il numero di trasmissioni per cilindro
library(dplyr)
# Step 1
data <- mtcars %>% 
#Step 2
mutate(am = factor(am, labels = c("auto", "man")),
    cyl = factor(cyl))

Una volta preparato il set di dati, รจ possibile tracciare il grafico:

# Passo 3

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar() +
    theme_classic()

Code Spiegazione

  • La chiamata ggplot() riceve i dati del dataset e la mappa aes()ping.
  • In aes() includi la variabile asse x e quale variabile รจ richiesta per riempire la barra (cioรจ am)
  • geom_bar(): crea il grafico a barre

Produzione:

Aggiungi un gruppo nelle barre

La mappaping La barra verrร  riempita con due colori, uno per ogni livello. รˆ facilissimo cambiare il gruppo scegliendo altre variabili fattoriali nel dataset.

Grafico a barre in percentuale

รˆ possibile visualizzare la barra in percentuale anzichรฉ in conteggio grezzo.

# Grafico a barre in percentuale

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = "fill") +
    theme_classic()

Code Spiegazione

  • Utilizzare position = โ€œfillโ€ nell'argomento geom_bar() per creare un grafico con percentuale nell'asse y.

Produzione:

Grafico a barre in percentuale

Barre affiancate

รˆ facile tracciare il grafico a barre con la variabile del gruppo affiancata.

# Bar chart side by side
ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = position_dodge()) +
    theme_classic()

Code Spiegazione

  • position=position_dodge(): indica esplicitamente come disporre le barre

Produzione:

Barre affiancate

Grafico a barre con statistiche riassuntive

Nella seconda parte del tutorial, l'asse y riporta un valore calcolato anzichรฉ un conteggio. Si noti che si tratta ancora di un grafico a barre: un vero e proprio istogramma verrร  trattato piรน avanti e utilizza un oggetto geometrico diverso.

Il tuo obiettivo รจ creare un grafico con il miglio medio per gallone per ciascun tipo di bombola. Per disegnare un grafico informativo, seguirai questi passaggi:

  • Passaggio 1: crea una nuova variabile con il miglio medio per gallone per cilindro
  • Passaggio 2: crea un istogramma di base
  • Passaggio 3: modificare l'orientamento
  • Passaggio 4: cambia il colore
  • Passaggio 5: modificare la dimensione
  • Passaggio 6: aggiungi etichette al grafico

Passo 1) Crea una nuova variabile

Crei un frame di dati denominato data_histogram che restituisce semplicemente le miglia medie per gallone in base al numero di cilindri dell'auto. Chiami questa nuova variabile mean_mpg e arrotondi la media con due decimali.

# Passo 1

data_histogram <- mtcars %>%
mutate(cyl = factor(cyl)) %>%
group_by(cyl) %>%
summarize(mean_mpg = round(mean(mpg), 2))

Passo 2) Crea un istogramma di base

รˆ possibile tracciare l'istogramma. Non รจ ancora abbastanza rifinito per essere consegnato a un cliente, ma mostra giร  l'andamento.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity")

Code Spiegazione

  • Aes() ora ha due variabili. La variabile cyl si riferisce all'asse x e mean_mpg รจ l'asse y.
  • Si passa stat = โ€œidentityโ€ in modo che geom_bar() utilizzi la variabile dell'asse y cosรฌ com'รจ, invece di contare le righe. Il valore predefinito per geom_bar() รจ stat = โ€œcountโ€.

Produzione:

Istogramma

Passo 3) Cambiare l'orientamento

Si modifica l'orientamento del grafico da verticale a orizzontale.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity") +
    coord_flip()

Code Spiegazione

  • Puoi controllare l'orientamento del grafico con coord_flip().

Produzione:

Istogramma

Passo 4) Cambia il colore

รˆ possibile differenziare i colori delle barre in base al livello del fattore della variabile dell'asse x.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    theme_classic()

Code Spiegazione

  • รˆ possibile tracciare il grafico per gruppi con fill= cyl mapping. R gestisce automaticamente i colori in base ai livelli della variabile cyl

Produzione:

Istogramma

Passo 5) Cambia la taglia

Per rendere il grafico piรน gradevole, riduci la larghezza della barra.

graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity",
        width = 0.5) +
    coord_flip() +
    theme_classic()

Code Spiegazione

  • L'argomento width all'interno di geom_bar() controlla lo spessore della barra. Un valore maggiore la renderร  piรน larga.
  • Il grafico viene memorizzato nel grafo degli oggetti, perchรฉ il passaggio successivo lo riutilizza senza modifiche. La memorizzazione dei grafici intermedi mantiene il codice leggibile.

Produzione:

Istogramma

Passo 6) Aggiungi etichette al grafico

L'ultimo passaggio aggiunge il valore di mean_mpg come etichetta all'interno di ciascuna barra.

graph +
    geom_text(aes(label = mean_mpg),
        hjust = 1.5,
        color = "white",
        size = 3) +
    theme_classic()

Code Spiegazione

  • La funzione geom_text() รจ utile per controllare l'estetica del testo.
    • label=: aggiunge un'etichetta all'interno delle barre
    • mean_mpg: utilizza la variabile mean_mpg per l'etichetta
  • hjust controlla la posizione dell'etichetta lungo la barra. Valori vicini a 1 la posizionano vicino all'estremitร  della barra, mentre valori maggiori la spingono verso l'asse. Se l'orientamento del grafico รจ verticale, sostituire hjust con vjust.
  • color="bianco": cambia il colore del testo. Qui usi il colore bianco.
  • size=3: imposta la dimensione del testo.

Produzione:

Istogramma

Come ordinare ed etichettare le barre in un grafico a barre in R

Due dettagli finali distinguono un grafico in bozza da uno pronto per la pubblicazione: ordinare le barre in base al valore e etichettare correttamente gli assi.

Riordino delle barrette. ggplot2 ordina i livelli dei fattori in ordine alfabetico per impostazione predefinita, che raramente รจ l'ordine piรน informativo. Racchiudi la variabile x nella funzione reorder() per ordinarla in base a una seconda variabile:

# Sort the bars from lowest to highest mean_mpg
ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) +
    geom_bar(stat = "identity", fill = "coral") +
    theme_classic()

Anteponendo un segno meno alla variabile di ordinamento, reorder(cyl, -mean_mpg), si inverte la direzione.

Aggiunta di titoli ed etichette agli assi. La funzione labs() imposta ogni elemento di testo in una singola chiamata:

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    labs(title = "Average fuel economy by cylinder count",
        subtitle = "mtcars dataset",
        x = "Number of cylinders",
        y = "Mean miles per gallon",
        fill = "Cylinders",
        caption = "Source: mtcars") +
    theme_classic()

Imposta fill = NULL all'interno di labs() per eliminare completamente il titolo della legenda e usa theme(legend.position = โ€œnoneโ€) per rimuovere la legenda quando l'asse x nomina giร  i gruppi.

Scegliere i propri colori. Sostituisci la tavolozza predefinita con una specifica in modo che il grafico corrisponda allo stile della tua casa:

scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))

Come creare un istogramma in R con geom_histogram()

Un istogramma mostra come รจ distribuita una singola variabile continua. Invece di contare le categorie, ggplot2 suddivide l'intervallo numerico in bin e conta quante osservazioni rientrano in ciascuno di essi.

library(ggplot2)
# Most basic histogram
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram()

R visualizza un messaggio che consiglia di scegliere un numero di bin piรน appropriato, poichรฉ il valore predefinito di 30 bin รจ arbitrario. Due argomenti controllano questo comportamento:

  • bidoni: il numero di intervalli in cui suddividere l'intervallo.
  • larghezza di banda: la larghezza di ciascun intervallo, espressa nelle unitร  della variabile. Utilizzare questo valore quando le unitร  sono significative.
# Set the number of bins
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(bins = 10, fill = "coral", color = "white") +
    theme_classic()

# Or set the width of each bin instead
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(binwidth = 4, fill = "coral", color = "white") +
    theme_classic()

La suddivisione in intervalli (bin) รจ la scelta piรน importante in un istogramma. Un numero insufficiente di intervalli nasconde la struttura reale del grafico, come ad esempio un secondo picco; un numero eccessivo, invece, trasforma il grafico in un insieme di rumore. Provate diversi valori prima di sceglierne uno definitivo.

Confronto tra gruppi. Mappa un fattore da riempire e imposta la posizione in modo che le distribuzioni rimangano leggibili:

ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) +
    geom_histogram(bins = 10, position = "identity", alpha = 0.5) +
    theme_classic()

Con position = โ€œidentityโ€ e un alpha ridotto, gli istogrammi si sovrappongono, consentendo di confrontare direttamente le forme. Utilizzare position = โ€œdodgeโ€ se si preferisce visualizzare i bin uno accanto all'altro.

Densitร  anzichรฉ conteggio. Quando le dimensioni dei gruppi sono diverse, traccia la densitร  in modo che le aree siano comparabili e sovrapponi una curva levigata:

ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(aes(y = after_stat(density)), bins = 10,
        fill = "coral", alpha = 0.6) +
    geom_density(color = "steelblue", linewidth = 1) +
    theme_classic()

Grafico a barre e istogramma in R: Code Referenze

Un grafico a barre si presta bene a un asse x categorico, dove l'asse y rappresenta un conteggio o una statistica riassuntiva. La tabella seguente elenca la chiamata a ggplot2 per ciascuna variante descritta in precedenza:

Obiettivo Code
Contare
ggplot(df, aes(x = factor(x1))) + geom_bar()
Contare con un colore di riempimento diverso
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar()
Contare con gruppi, impilati
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar()
Contare in gruppi, fianco a fianco
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge())
Conteggio con gruppi, impilati in%
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill")
Valori (statistica riassuntiva)
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity")
Istogramma di una variabile continua
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30)

DOMANDE FREQUENTI

Utilizza un istogramma quando la variabile sull'asse x รจ continua e desideri visualizzarne la distribuzione. Utilizza un grafico a barre quando l'asse x rappresenta categorie distinte e desideri confrontarle.

All'interno di aes(), il parametro fill associa una variabile al colore, in modo che ogni gruppo ottenga la propria tonalitร . Al di fuori di aes(), all'interno di geom_bar(), il parametro fill รจ un valore fisso applicato a ogni barra.

Non esiste una risposta universale. Iniziate calcolando la radice quadrata del numero di osservazioni, quindi apportate le modifiche necessarie. Un numero insufficiente di intervalli puรฒ nascondere strutture complesse come un secondo picco, mentre un numero eccessivo produce un grafico rumoroso e irregolare.

Gli istogrammi rappresentano il primo passo standard nell'analisi esplorativa dei dati per i progetti di intelligenza artificiale, rivelando asimmetrie, valori anomali e squilibri tra le classi prima ancora di addestrare qualsiasi modello. I grafici a barre riassumono quindi l'importanza delle caratteristiche e le frequenze delle categorie.

Sรฌ. Gli assistenti IA possono creare layer ggplot2 a partire da una semplice descrizione del grafico e spiegare errori come la mancanza di un argomento stat. Esegui sempre il codice generato sui tuoi dati per confermare la mappa.ping รจ giusto.

Riassumi questo post con: