Corso
In questo articolo, ti farò fare un giro dei grafici a barre in Python usando le librerie più conosciute: Matplotlib, Seaborn, Plotly, Plotnine e Pandas. Puoi dare un colpo d’occhio alle visualizzazioni e scegliere la libreria che preferisci. Per ogni metodo, partirò dalle basi per creare semplici grafici a barre e poi passerò gradualmente alle tecniche di personalizzazione.
Cercherò di essere il più completo e chiaro possibile, ma ricorda che nell’analisi dei dati e nel data science i grafici a barre sono solo una parte del quadro. Per una visione ampia e per fare pratica con dataset reali, ottenere una certificazione molto ambita e iniziare una carriera nel settore, iscriviti oggi al nostro career track Associate Data Scientist in Python.
Modi per creare un grafico a barre in Python
Vediamo come creare e personalizzare grafici a barre con alcune delle librerie Python più popolari. Ogni libreria offre funzionalità uniche e diversi livelli di personalizzazione.
Crea un grafico a barre con Matplotlib
Partirò da Matplotlib, una libreria di base per la creazione di grafici in Python che offre molte opzioni di personalizzazione.
Grafici a barre di base
Per iniziare con Matplotlib, devi importare le librerie necessarie. Il modulo pyplot di Matplotlib fornisce funzioni per creare grafici. In questo esempio useremo alcuni dati di esempio che mostrano quante persone preferiscono diverse librerie di visualizzazione. Qui la lista library contiene i nomi delle librerie, che compaiono come etichette sull’asse x, e la lista chosen_by contiene il numero corrispondente di appassionati, mostrato come altezze delle barre sull’asse y.
import matplotlib.pyplot as plt
# Number of preferences for different libraries
library = ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine']
chosen_by = [2500, 1800, 3000, 2200]
Creare un grafico a barre verticale richiede la chiamata della funzione plt.bar() con i nomi delle librerie e i dati sulle preferenze. Scelgo il colore skyblue. Le funzioni plt.xlabel(), plt.ylabel() e plt.title() aggiungono le etichette agli assi x e y e impostano un titolo per il grafico. Infine, plt.show() visualizza il grafico.
# Vertical Bar Plot
plt.bar(library, chosen_by, color='skyblue')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
plt.show()

Allo stesso modo, puoi creare un grafico a barre orizzontale usando la funzione plt.barh(). Per questo, userò un colore verde chiaro per le barre.
# Horizontal Bar Plot
plt.barh(library, chosen_by, color='lightgreen')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
plt.show()

Personalizzazioni avanzate
Matplotlib consente un’ampia gamma di personalizzazioni, come aggiungere annotazioni e personalizzare etichette degli assi, titoli e legende. Ad esempio, puoi aggiungere annotazioni a ciascuna barra usando la funzione plt.text(), che posiziona il testo nelle coordinate specificate.
plt.bar(library, chosen_by, color='skyblue')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
# Adding annotations
for i, value in enumerate(chosen_by):
plt.text(i, value + 5, str(value), ha='center')
plt.show()

Nel codice sopra, plt.text() viene usato per mostrare il numero di appassionati sopra ogni barra. La funzione enumerate() fornisce l’indice e il valore di ciascuna barra, così il testo è posizionato correttamente.
Grafici a barre raggruppati e impilati
Per creare grafici a barre raggruppati e impilati con Matplotlib, puoi usare parametri aggiuntivi per rappresentare più categorie, come diverse regioni o demografie. Supponiamo di avere dati sulla popolarità delle librerie di visualizzazione in diverse regioni. Per i grafici a barre raggruppati, definisci dataset separati per ogni regione e usa bar_width per controllare la spaziatura e l’allineamento delle barre, posizionando ogni gruppo affiancato per un confronto immediato.
import numpy as np
# Define library names
library = ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine']
# Number of Enthusiasts for different regions
enthusiasts_north = [2000, 1500, 2500, 2000]
enthusiasts_south = [1500, 1300, 2000, 1800]
bar_width = 0.35
x = np.arange(len(library))
# Grouped Bar Plot
plt.bar(x - bar_width/2, enthusiasts_north, bar_width, label='North Region', color='skyblue')
plt.bar(x + bar_width/2, enthusiasts_south, bar_width, label='South Region', color='lightgreen')
# Adding labels and title
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Regional Preferences for Visualization Libraries (Grouped)')
plt.xticks(x, library)
plt.legend(title='Regions')
plt.show()

In questo esempio, la riga x = np.arange(len(library)) crea un array di posizioni per le barre. La funzione plt.bar() viene usata due volte per creare le barre per ciascuna regione, e la funzione plt.xticks() imposta le etichette sull’asse x. La funzione plt.legend() visualizza una legenda per differenziare le regioni.
Per un grafico a barre impilate, puoi usare il parametro bottom per impilare un dataset sopra un altro. Ecco come visualizzare il numero di appassionati di diverse regioni impilati per ciascuna libreria.
# Define library names
library = ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine']
# Number of Enthusiasts for different regions
enthusiasts_north = [2000, 1500, 2500, 2000]
enthusiasts_south = [1500, 1300, 2000, 1800]
x = np.arange(len(library))
# Stacked Bar Plot
plt.bar(x, enthusiasts_north, label='North Region', color='skyblue')
plt.bar(x, enthusiasts_south, bottom=enthusiasts_north, label='South Region', color='lightcoral')
# Adding labels and title
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Regional Preferences for Visualization Libraries (Stacked)')
plt.legend()
plt.show()

In questo grafico a barre impilate, enthusiasts_south rappresenta i dati per gli appassionati della regione Sud, mentre enthusiasts_north è usato come base per la regione Nord. La funzione plt.bra() viene chiamata una volta per creare le barre per la regione Nord, poi di nuovo per impilare sopra le barre per la regione Sud.
Puoi consultare il nostro corso Introduction to Data Visualization with Matplotlib per una spiegazione più approfondita su come usare la libreria Matplotlib in Python. C’è anche il nostro Matplotlib Cheat Sheet, che scompone il processo in sei passaggi fondamentali.
Creare grafici a barre con Seaborn
Seaborn è una libreria di visualizzazione costruita sopra Matplotlib che semplifica la creazione di grafici a barre molto gradevoli.
Grafici a barre di base
La funzione barplot() di Seaborn rende facile creare grafici a barre di base con pochissimo codice. Per prima cosa, importa la libreria Seaborn e crea un dizionario.
import seaborn as sns
data = {'Library': library, 'Chosen by': chosen_by}
Poi usa la funzione sns.barplot() per creare il grafico a barre, specificando le variabili x e y e la fonte dei dati. Qui sto usando la palette di colori viridis.
sns.barplot(x='Library', y='Chosen by', data=data, palette='viridis')
plt.title('Which Visualization Library Do People Prefer?')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Puoi decidere di non aggiungere un valore per palette e otterrai un colore uniforme nel grafico oppure, meglio ancora, assegnare un colore al grafico a barre. In questo caso userò un codice esadecimale:
sns.barplot(x='Library', y='Chosen by', data=data, color=’#5EB1FF’)
plt.title('Which Visualization Library Do People Prefer?')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Personalizzazione avanzata
Seaborn, naturalmente, consente anche ampie opzioni di personalizzazione, incluse i colori e le annotazioni. Per esempio, puoi aggiungere annotazioni al grafico a barre in modo simile a quanto fatto in Matplotlib.
# Customized Bar Plot
sns.barplot(x='Library', y='Chosen by', data=data, palette='viridis')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
# Adding annotations
for i, value in enumerate(chosen_by):
plt.text(i, value + 5, str(value), ha='center')
plt.show()

In questo esempio, il parametro palette='viridis' cambia la palette di colori delle barre e la funzione plt.text() aggiunge annotazioni a ciascuna barra.
Puoi dare un’occhiata al nostro corso Introduction to Data Visualization with Seaborn per molti più dettagli. Per rendere il tuo grafico a barre Seaborn particolarmente elegante, usa la nostra guida rapida alle palette di colori Seaborn per alcune buone idee.
Creare grafici a barre con Plotly
Passiamo a Plotly, una libreria nota per creare visualizzazioni interattive e dinamiche, inclusi i grafici a barre.
Grafici a barre di base
Creare un grafico a barre di base con Plotly comporta l’uso del modulo graph_objects. Possiamo importare il modulo necessario e creare un grafico a barre usando un colore azzurro per le barre.
import plotly.graph_objects as go
fig = go.Figure(go.Bar(x=library, y=chosen_by, marker_color='skyblue'))
fig.update_layout(title='Which Visualization Library Do People Prefer?', xaxis_title='Visualization Library', yaxis_title='Number of Enthusiasts')
fig.show()

Personalizzazione avanzata
Plotly offre modi per migliorare l’interattività e l’aspetto dei grafici a barre. Ad esempio, puoi aggiungere annotazioni alle barre usando la funzione fig.add_annotation().
fig = go.Figure(go.Bar(x=library, y=chosen_by, marker_color='skyblue'))
fig.update_layout(title='Which Visualization Library Do People Prefer?', xaxis_title='Visualization Library', yaxis_title='Number of Enthusiasts')
# Adding annotations
for i, value in enumerate(chosen_by):
fig.add_annotation(x=library[i], y=value, text=str(value), showarrow=False, yshift=10)
fig.show()

Grafici a barre dinamici e interattivi
Plotly può creare grafici a barre dinamici che si aggiornano in tempo reale, rendendoli ideali per dashboard. Usando Plotly Express, un’interfaccia di alto livello per Plotly, puoi creare grafici a barre interattivi con pochissimo codice.
import plotly.express as px
# Using a sample dataset from Plotly
df = px.data.gapminder().query("year == 2007")
fig = px.bar(df, x='continent', y='pop', color='continent', hover_name='country', title='Population by Continent in 2007')
fig.show()

In questo esempio, la funzione px.data.gapminder() carica un dataset di esempio da Plotly. La funzione px.bar() crea un grafico a barre interattivo con le variabili x e y specificate, il colore, l’hover name e il titolo. Abbiamo un corso dettagliato qui su DataCammp se vuoi approfondire: Introduction to Data Visualization with Plotly.
Creare grafici a barre con Plotnine
Plotnine è un’implementazione della grammar of graphics in Python, ispirata a ggplot2 in R. Consente un approccio dichiarativo alla creazione di grafici complessi combinando diversi elementi.
Grafici a barre di base
Per iniziare con Plotnine, importa le librerie necessarie e crea un DataFrame. Quindi, definisci un oggetto ggplot, aggiungi un layer geom_bar e specifica le estetiche.
from plotnine import ggplot, aes, geom_bar, labs
import pandas as pd
# Number of preferences for different libraries
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'Chosen by': [2500, 1800, 3000, 2200]})
# Basic Bar Plot
ggplot(data, aes(x='Library', y='Chosen by')) + geom_bar(stat='identity', fill='skyblue') + labs(title='Which Visualization Library Do People Prefer?', x='Visualization Library', y='Number of Enthusiasts')

In questo esempio, aes(x='Library', y='Chosen by') imposta le estetiche x e y per il grafico. La parte geom_bar(stat='identity', fill='skyblue') crea un grafico a barre con riempimento azzurro.
Personalizzazione avanzata
Puoi personalizzare usando l’approccio a layer di Plotnine. Puoi aggiungere annotazioni, etichette degli assi, titoli e legende.
from plotnine import ggplot, aes, geom_bar, geom_text, labs
# Creating our Pandas DataFrame
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'Chosen by': [2500, 1800, 3000, 2200]})
# Basic Bar Plot with labels
(ggplot(data, aes(x='Library', y='Chosen by'))
+ geom_bar(stat='identity', fill='skyblue')
+ geom_text(aes(label='Chosen by'), va='bottom', size=10, nudge_y=5) # Adds labels on top of bars
+ labs(title='Which Visualization Library Do People Prefer?', x='Visualization Library', y='Number of Enthusiasts'))

Grafici a barre raggruppati e impilati
Plotnine supporta anche grafici a barre raggruppati e impilati. Per i grafici raggruppati, devi prima definire una variabile categorica per il raggruppamento.
# Number of preferences for different libraries in different regions
data = pd.DataFrame({'Library': ['Matplotlib', 'Plotly', 'Plotnine', 'Seaborn'] * 2,
'Chosen by': [2000, 1500, 2500, 2000, 1500, 1300, 2000, 1800],
'Region': ['North', 'North', 'North', 'North', 'South', 'South', 'South', 'South']})
# Grouped Bar Plot
(ggplot(data, aes(x='Library', y='Chosen by', fill='Region'))
+ geom_bar(stat='identity', position='dodge')
+ labs(title='Regional Preferences for Visualization Libraries (Grouped)', x='Visualization Library', y='Number of Enthusiasts'))

Per i grafici a barre impilate, puoi usare position = 'stack'.
# Stacked Bar Plot
(ggplot(data, aes(x='Library', y='Chosen by', fill='Region'))
+ geom_bar(stat='identity', position='stack')
+ labs(title='Regional Preferences for Visualization Libraries (Stacked)', x='Visualization Library', y='Number of Enthusiasts'))

Nota come in questi esempi position = 'dodge' crea barre raggruppate, mentre position = 'stack' le impila.
Creare grafici a barre con Pandas
Dulcis in fundo, Pandas. Pandas offre un modo pratico per creare grafici a barre direttamente dai DataFrame, quindi è un’opzione rapida e semplice per i grafici di base.
Grafici a barre di base
Per creare un grafico a barre in Pandas, puoi usare la funzione plot.bar() su un DataFrame.
import pandas as pd
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'Chosen by': [2500, 1800, 3000, 2200]})
Poi crea un grafico a barre usando plot.bar().
# Basic Bar Plot
data.plot.bar(x='Library', y='Chosen by', color='skyblue', title='Which Visualization Library Do People Prefer?')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Personalizzazione avanzata
Pandas consente la personalizzazione dei grafici a barre tramite parametri aggiuntivi e l’integrazione con Matplotlib.
# Customized Bar Plot
ax = data.plot.bar(x='Library', y='Chosen by', color='skyblue', title='Which Visualization Library Do People Prefer?')
ax.set_xlabel('Visualization Library')
ax.set_ylabel('Number of Enthusiasts')
# Adding annotations
for i in ax.containers:
ax.bar_label(i, label_type='edge')
plt.show()

In questo esempio, ax.bar_label(i, label_type='edge') aggiunge annotazioni alle barre, mostrando il numero sopra ciascuna barra.
Grafici a barre raggruppati e impilati
Creare grafici a barre raggruppati e impilati in Pandas è semplice. Per i grafici a barre raggruppati, devi rimodellare il DataFrame per avere colonne separate per ogni gruppo.
# Number of preferences for different libraries in different regions
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'North Region': [2000, 1500, 2500, 2000],
'South Region': [1500, 1300, 2000, 1800]})
# Grouped Bar Plot
data.plot.bar(x='Library', y=['North Region', 'South Region'], title='Regional Preferences for Visualization Libraries (Grouped)')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Per i grafici a barre impilate, usa stacked=True.
# Stacked Bar Plot
data.plot.bar(x='Library', y=['North Region', 'South Region'], stacked=True, title='Regional Preferences for Visualization Libraries (Stacked)')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Best practice per progettare grafici a barre in Python efficaci
Creare grafici a barre è semplice, ma progettarli in modo efficace e informativo richiede attenzione ai dettagli. Le seguenti linee guida ti aiuteranno a creare grafici a barre che comunicano efficacemente la storia dei tuoi dati.
- Evitare gli errori comuni: Quando progetti grafici a barre, evita di sovraccaricarli di informazioni per mantenerli chiari ed efficaci. Attieniti all’essenziale per prevenire il disordine visivo. Usa scale coerenti tra gli assi. Assicurati che l’asse inizi da zero per non fuorviare chi guarda con differenze ingigantite.
- Scelta dei colori e degli evidenziamenti: Seleziona colori che aggiungano significato ai tuoi dati, ad esempio rosso per valori negativi o verde per quelli positivi. Mantieni uno schema di colori coerente tra grafici correlati per aiutare il lettore a seguire il filo. Usa il colore per attirare l’attenzione sugli insight importanti.
- Ordinare le barre per una maggiore chiarezza: Organizza le barre in modo logico in base al contesto dei dati, ad esempio in ordine cronologico per dati temporali, oppure in ordine crescente/decrescente per mettere in risalto le tendenze. Raggruppa le barre correlate e usa colore o spaziatura per separare i gruppi.
Conclusione
Padroneggiare la creazione e la personalizzazione dei grafici a barre è una competenza essenziale per chiunque lavori con i dati. Seguendo le linee guida e le best practice descritte in questo articolo, puoi creare grafici a barre chiari, informativi e visivamente accattivanti che comunicano efficacemente gli insight. Questo ti permetterà di presentare i tuoi dati in modo più efficace e prendere decisioni più informate.
Se vuoi continuare ad allenare le tue abilità di visualizzazione dati in Python, dai un’occhiata al nostro corso Intro to Python for Data Science, che offre un punto di partenza per chi comincia, oppure esplora il nostro skill track Python Programming per un percorso di apprendimento completo per padroneggiare Python.
Professionista dei dati e scrittore con esperienza, appassionato nell’aiutare aspiranti esperti nel mondo dei dati.
Domande frequenti sui grafici a barre in Python
Che cos’è un grafico a barre in Python e perché è utile?
Un grafico a barre rappresenta dati categorici con barre rettangolari, la cui lunghezza o altezza corrisponde al valore della categoria. È utile per confrontare categorie, visualizzare distribuzioni e individuare trend o outlier.
Come scelgo tra un grafico a barre verticale e uno orizzontale in Python?
Puoi usare un grafico a barre verticale per etichette brevi o facilmente leggibili, mentre scegliere un grafico a barre orizzontale per etichette più lunghe o molte categorie aiuta a evitare il disordine.
Come posso personalizzare i colori delle barre nel mio grafico?
Puoi personalizzare i colori delle barre per rendere il grafico più gradevole o per adattarlo a uno schema cromatico specifico. In Matplotlib, usa il parametro color:
plt.bar(categories, values, color=['red', 'green', 'blue'])
plt.show()
Come posso ordinare le barre nel mio grafico a barre usando Python?
Ordinare le barre può aiutare a mettere in evidenza le categorie più o meno rilevanti. Puoi ordinare i dati prima di creare il grafico:
data = {'Category': ['A', 'B', 'C'], 'Value': [4, 7, 1]}
df = pd.DataFrame(data).sort_values(by='Value', ascending=False)
plt.bar(df['Category'], df['Value'])
plt.show()Posso creare grafici a barre interattivi in Python con Plotly?
Sì, Plotly consente di creare grafici a barre interattivi. Ecco un esempio con Plotly Express:
import plotly.express as px
data = {'Category': ['A', 'B', 'C'], 'Value': [4, 7, 1]}
fig = px.bar(data, x='Category', y='Value', title='Interactive Bar Plot')
fig.show()

