Vai al contenuto principale

Tutorial su Plotly Express in Python: sblocca visualizzazioni straordinarie

Impara a creare grafici altamente interattivi e accattivanti con Plotly Express in Python.
Aggiornato 29 set 2026  · 10 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Plotly non serve solo a creare belle visualizzazioni: ti aiuta a sbloccare tutto il potenziale dei tuoi dati e a far emergere insight che altrimenti resterebbero nascosti. È il ponte tra il linguaggio dei numeri e quello delle storie, dando a persone e organizzazioni il potere di prendere decisioni informate e generare cambiamenti significativi.

È la descrizione che ChatGPT usa per parlare di Plotly. Chiaro: Plotly è una delle migliori librerie di visualizzazione dei dati in circolazione.

Plotly Express

Crea grafici altamente interattivi e visivamente accattivanti come quello qui sotto:

Oggi imparerai le basi per creare visual straordinari con Plotly.

Nozioni di base su Plotly Express

Come in qualsiasi altro tutorial, iniziamo installando la libreria tramite pip (o se preferisci conda).

$ pip install --upgrade plotly
$ conda install -c conda-forge plotly

Plotly riceve aggiornamenti regolari, quindi assicurati di includere il tag --upgrade se hai già installato la libreria.

Il tutorial si concentra sulla Express API di Plotly, introdotta nel 2019, che offre numerosi vantaggi rispetto ai vecchi modi di interagire con la libreria core di Plotly:

  • Sintassi semplice (si legge quasi come l’inglese)
  • Ampia gamma di visualizzazioni (o strumenti per crearne di tue)
  • Scalatura automatica di assi e colori
  • Integrazione con pandas (puoi usare Plotly come backend di plotting per la funzione .plot di Pandas)

Ecco l’anatomia di un grafico di base in Plotly Express:

import plotly.express as px

fig = px.plotting_function(
    dataframe,
    x='column-for-xaxis',
    y='column-for-yaxis',
    title='Title For the Plot',
    width=width_in_pixels,
    height=height_in_pixels
)

fig.show()

I diversi grafici hanno il proprio nome, come histogram o scatter nel modulo express, caricato come px. Il primo argomento di qualsiasi funzione di plotting è il dataframe e i nomi delle colonne da tracciare sugli assi X e Y.

Le buone pratiche suggeriscono di dare ai grafici un title informativo, così chi legge capisce subito di cosa parla il grafico.

Quando una funzione di plotting viene eseguita, restituisce un oggetto Figure su cui chiamare il metodo show per visualizzare il grafico nel tuo amato notebook.

Per iniziare a creare i grafici, ci serve un dataset. Per questo tutorial useremo un dataset sui diamanti. Contiene una bella combinazione di feature numeriche e categoriche: perfetto per gli scopi di questo articolo.

import pandas as pd

diamonds = pd.read_csv("data/diamonds.csv")

diamonds.head()

Data Set

Il dataset contiene oltre 53k diamanti con 10 caratteristiche fisiche. Qui sotto puoi esplorarne le statistiche di base.

diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
#   Column   Non-Null Count  Dtype 
---  ------   --------------  ----- 
0   carat    53940 non-null  float64
1   cut      53940 non-null  object
2   color    53940 non-null  object
3   clarity  53940 non-null  object
4   depth    53940 non-null  float64
5   table    53940 non-null  float64
6   price    53940 non-null  int64 
7   x        53940 non-null  float64
8   y        53940 non-null  float64
9   z        53940 non-null  float64
dtypes: float64(6), int64(1), object(3)
memory usage: 4.1+ MB
diamonds.describe()

Una delle prime cose da fare quando si esegue l’analisi esplorativa dei dati (EDA) è esplorare le distribuzioni individuali.

Plotly offre molti grafici per questo compito: istogrammi, boxplot, violin plot, bar chart, ecc. Vediamone alcuni.

Istogrammi in Plotly Express

L’istogramma è probabilmente il primo grafico che si impara.

Ordina i valori di una distribuzione e li inserisce in bin. Poi usa barre per rappresentare quanti valori ricadono in ciascun bin:

import plotly.express as px
​
fig = px.histogram(
  diamonds,
  x="price",
  title="Histogram of diamond prices",
  width=600,
  height=400,
)
​
fig.show()

Histogram Plotly Express

Se passi il mouse su una barra, puoi vedere l’intervallo del bin corrispondente. Plotly trova automaticamente il numero di bin, ma se vuoi impostarlo tu, puoi usare il parametro nbins.

Trovare il numero perfetto di bin per ogni distribuzione non è semplice. Per questo puoi usare una pratica comune: impostare lo stesso numero di bin pari alla radice quadrata della lunghezza della distribuzione:

# Find the correct number of bins
nbins = int(len(diamonds) ** (1 / 2))
​
fig = px.histogram(
  diamonds,
  x="price",
  title="Histogram of diamond prices",
  nbins=nbins,
  width=600,
  height=400,
)
​
fig.show()

Bar chart in Plotly Express

Gli istogrammi analizzano caratteristiche quantitative. Per analizzare dati categorici, usiamo i bar chart. Ad esempio, passando la colonna categorica cut alla funzione histogram, otteniamo un tipo di bar chart chiamato countplot. Sì, l’hai indovinato: conta il numero di osservazioni in ogni categoria.

fig = px.histogram(diamonds, x="cut")
​
fig.show()

Bar Chart Plotly Express

Ma aspetta, non abbiamo messo etichette sul grafico! Risolviamo con la funzione update_layout, che può modificare molti aspetti di una figura dopo la creazione.

fig.update_layout(
  title="The number of diamonds in each diamond cut category",
  xaxis_title="",
  yaxis_title="Count",
)

Bar Chart Labels Plotly Express

Sai già cosa fa title. xaxis_title e yaxis_title sostituiscono le etichette degli assi generate da Plotly (che sono semplicemente i nomi delle colonne).

Ora vediamo il prezzo medio per ogni categoria di taglio del diamante. Per prima cosa usiamo il groupby di pandas:

mean_prices = (
    diamonds.groupby("cut")["price"].mean().reset_index()
)

mean_prices

Groupby

Concatenare la funzione reset_index alla fine di un’operazione di groupby trasforma l’output in un DataFrame, e Plotly ama i DataFrame. Quindi, passiamolo alla funzione bar:

fig = px.bar(mean_prices, x="cut", y="price")
​
fig.update_layout(
  title="Average diamond prices for each cut category",
  xaxis_title="",
  yaxis_title="Mean price ($)",
)
​
fig.show()

Mean Price

bar prende una feature categorica e una numerica, creando una singola barra per ogni riga del DataFrame passato. Il risultato è un confronto piacevole alla vista dei prezzi per ciascun tipo di diamante.

Box plot in Plotly Express

Un altro grafico comune per analizzare le distribuzioni è il boxplot, creato con box in Plotly Express:

fig = px.box(diamonds, x="clarity", y="carat")
​
fig.update_layout(
  title="Distribution of diamond carats for each clarity category",
  xaxis_title="Clarity",
  yaxis_title="Carat",
)
​
fig.show()

Box Plot Plotly Express

Invece di creare barre che mostrano solo il carato medio dei diamanti, il boxplot visualizza più statistiche:

Box Plot Statistics

Puoi vedere:

  • Minimo/massimo
  • Mediana
  • 25º percentile
  • 75º percentile
  • e outlier

per ogni categoria di purezza del diamante.

Violin plot in Plotly Express

Un altro grafico utile per esplorare le distribuzioni è il violin plot. I violin plot sono sostanzialmente box plot con qualche abbellimento in più:

fig = px.violin(diamonds, x="cut", y="price")
​
fig.show()

Violin Plot Plotly Express

Invece di mostrare una scatola, visualizza una curva liscia che rappresenta la densità di una feature. Per sovrapporre un box plot, puoi impostare l’attributo box su True:

fig = px.violin(diamonds, x="cut", y="price", box=True)
​
fig.show()

Violin Box Plot Plotly Express

A differenza dei box plot, che mostrano solo statistiche riassuntive, i violin plot mostrano anche la forma della distribuzione.

Visualizzare le relazioni tra feature con Plotly Express

Quando tracci feature strettamente correlate, inizi a vedere nuovi pattern e insight. Ad esempio, se assumiamo che il carato (peso) del diamante sia il principale fattore che ne determina il prezzo, esploriamo questa relazione.

Scatterplot in Plotly Express

Possiamo usare uno scatterplot (px.scatter) che rappresenta tutti i diamanti del dataset come punti. La posizione dei punti è determinata dai rispettivi valori di prezzo e carato:

fig = px.scatter(diamonds, x="price", y="carat")
​
fig.update_layout(
  title="Price vs. Carat",
  xaxis_title="Price ($)",
  yaxis_title="Carat",
)
​
fig.show()

Scatter Plot Plotly Express

Qui incappiamo in un brutto caso di overplotting, che si verifica quando ci sono troppi dati da visualizzare in un unico grafico. Invece di mostrare pattern e trend reali, l’overplotting li maschera.

Possiamo risolvere tracciando solo ~10% del dataset, più che sufficiente per rivelare eventuali pattern:

fig = px.scatter(
  diamonds.sample(5000), x="price", y="carat"
)
​
fig.update_layout(
  title="Price vs. Carat",
  xaxis_title="Price ($)",
  yaxis_title="Carat",
)
​
fig.show()

Scatter Plot 10 Percent

Nella chiamata a scatter, passiamo solo 5000 righe (.sample(5000)), che mostrano una leggera tendenza crescente nella relazione prezzo-carat.

Heatmap in Plotly Express

Le heatmap sono ottime per visualizzare dataset complessi, come una grande matrice in cui è difficile scorgere pattern da una miriade di numeri nelle celle.

Una heatmap assegna colori in base alla magnitudine di ciascuna cella della matrice. Uno scenario utile è osservare la matrice di correlazione di un dataset.

La correlazione misura la relazione lineare tra feature numeriche. Quindi, ogni cella della matrice di correlazione rappresenta la correlazione tra una coppia di feature.

Puoi calcolare la matrice di correlazione di qualsiasi dataset con il metodo corr di pandas, che restituisce un DataFrame. Se lo passi alla funzione imshow di Express, ottieni una heatmap:

import plotly.express as px
​
# Create heatmap using Plotly Express
fig = px.imshow(
  diamonds.corr(),
  color_continuous_scale="Inferno_r",
)
​
# Show plot
fig.show()

Heatmap Plotly Express

La correlazione varia da -1 a 1. Valori vicini ai bordi dell’intervallo indicano una forte relazione lineare positiva o negativa tra le feature.

Qui scegliamo la mappa colori Inferno invertita per il parametro color_continuous_scale. Puoi scegliere altre mappe dalla pagina delle scale di colore della documentazione di Plotly.

Personalizzare i grafici in Plotly Express

Una delle caratteristiche migliori della API di Plotly Express è la facile personalizzazione dei grafici.

La funzione update_layout include molti parametri con cui modificare quasi ogni aspetto dei tuoi chart.

In base a dove verranno mostrati i grafici, sta a te renderli presentabili per qualsiasi pubblico, sede o supporto.

Una delle prime cose da scegliere è il tema del grafico. I temi in Plotly sono configurazioni predefinite che controllano quasi tutti i componenti.

Puoi cambiarlo usando il parametro template di qualsiasi funzione di plotting:

sample = diamonds.sample(3000)
​
fig = px.scatter(
  sample, x="price", y="carat", template="ggplot2"
)
​
fig.show()

Plot Theme Plotly Express

Alcuni tra i più popolari sono ggplot2, seaborn, plotly_dark e presentation. Puoi vedere l’elenco completo chiamando plotly.io.templates.

Colori

Finora i nostri scatterplot sono stati bidimensionali. Ma possiamo aggiungere ulteriore informazione tramite il colore.

Per esempio, possiamo colorare ogni punto in base alla categoria di appartenenza del diamante. Per farlo, ti basta passare cut al parametro color:

sample = diamonds.sample(3000)
​
fig = px.scatter(sample, x="price", y="carat", color="cut")
​
fig.show()

Colors Plotly Express

Il parametro cut forza anche la presenza della legenda nel grafico, mostrando i colori delle categorie.

Dimensione dei marker

Un altro approccio è visualizzare una feature numerica tramite la dimensione dei punti.

Impostando il parametro size su carat, otteniamo punti di dimensioni diverse in base al carato del diamante:

fig = px.scatter(sample, x="price", y="x", size="carat")
​
fig.show()

Marker Size Plotly Express

E se usassimo sia colore che dimensione? Ma certo!

fig = px.scatter(
  sample, x="price", y="x", size="carat", color="cut"
)
​
fig.show()

Size and Color

Ma questo grafico non è molto informativo perché contiene troppa informazione da elaborare a colpo d’occhio. È buona pratica non inserire più di tre feature in un singolo grafico.

Conclusione

Complimenti per essere arrivato fino in fondo! In questo tutorial hai imparato abbastanza per continuare a studiare Plotly con alcune delle nostre altre risorse:

Puoi anche scoprire la Graph Objects API di Plotly, per più opzioni di personalizzazione, pieno controllo su interattività e animazioni, e supporto per tipi di visualizzazione avanzati.

Argomenti
Python
Data Visualization

Corsi Python

Corso

Creare dashboard con Dash e Plotly

4 ore
17K
Scopri come creare dashboard interattive e piene di informazioni utili con Dash e Plotly.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro