W3docs

Marker di Matplotlib

Impara a usare e personalizzare i marker di Matplotlib in Python. Stili, dimensioni, colori, riempimento e controllo per punto.

I marker sono i simboli che Matplotlib disegna in corrispondenza di ogni punto dati in un grafico. Scegliere lo stile di marker giusto — e sapere come ridimensionarlo, ricolorarlo e riempirlo — può fare la differenza tra un grafico caotico e uno che comunica chiaramente. Questa pagina illustra tutti gli stili di marker disponibili in Matplotlib, come personalizzarne l'aspetto e quando usare plot() rispetto a scatter() per il controllo punto per punto.

Cos'è un marker in Matplotlib?

Un marker è una forma disegnata in corrispondenza di ogni coordinata (x, y) in un grafico. La forma da usare si controlla con il parametro marker (o come parte di una stringa di formato). I marker sono separati dalla linea che collega i punti dati — è possibile mostrarne uno senza l'altro.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 5, 3, 7, 4]

# Line with markers
plt.plot(x, y, marker='o')

# Markers only — no connecting line
plt.plot(x, y, marker='s', linestyle='None')

plt.show()

Tutti gli stili di marker predefiniti

Matplotlib include più di 30 codici di marker predefiniti. La tabella seguente elenca i più comunemente utilizzati.

Codice markerForma
'o'Cerchio
's'Quadrato
'D'Diamante
'd'Diamante sottile
'^'Triangolo (su)
'v'Triangolo (giù)
'<'Triangolo (sinistra)
'>'Triangolo (destra)
'p'Pentagono
'h'Esagono 1
'H'Esagono 2
'8'Ottagono
'*'Stella
'+'Più
'x'Croce
'X'Croce piena
`''`
'_'Linea orizzontale
'.'Punto (piccolo)
','Pixel
'1'Tri-basso
'2'Tri-alto
'3'Tri-sinistra
'4'Tri-destra
'None' o ''Nessun marker

Per vedere tutti i marker contemporaneamente, è possibile iterare su matplotlib.markers.MarkerStyle.markers:

import matplotlib.pyplot as plt
import matplotlib.markers as mmarkers

print(list(mmarkers.MarkerStyle.markers.keys()))

Usare i marker in un grafico a linee

La funzione plot() accetta un argomento marker. Applica lo stesso marker a ogni punto dati.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

plt.plot(x, y, marker='o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Line plot with circle markers')
plt.show()

Usare una stringa di formato

Invece di argomenti chiave separati, è possibile combinare lo stile della linea, il colore e il marker in un'unica stringa di formato: '[color][marker][linestyle]'.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

# Red circles connected by a dashed line
plt.plot(x, y, 'ro--')
plt.title('Format string: red circles, dashed line')
plt.show()

Componenti comuni della stringa di formato:

ColoreMarkerStile linea
'r' rosso'o' cerchio'-' continua
'g' verde's' quadrato'--' tratteggiata
'b' blu'^' triangolo':' punteggiata
'k' nero'*' stella'-.' tratto-punto
'm' magenta'+' più'None' nessuna linea

Personalizzare l'aspetto dei marker

Matplotlib offre quattro argomenti chiave per un controllo dettagliato dei marker:

ParametroCosa controlla
markersize (o ms)Diametro del marker in punti
markerfacecolor (o mfc)Colore di riempimento del marker
markeredgecolor (o mec)Colore del bordo del marker
markeredgewidth (o mew)Larghezza del bordo del marker in punti
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

plt.plot(
    x, y,
    marker='o',
    markersize=12,
    markerfacecolor='gold',
    markeredgecolor='navy',
    markeredgewidth=2,
)
plt.title('Customized circle markers')
plt.show()

Marker vuoti

Imposta markerfacecolor='none' (stringa in minuscolo) per disegnare solo il bordo, creando un marker vuoto:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [3, 1, 4, 1, 5]

plt.plot(x, y, marker='s', markersize=14, markerfacecolor='none', markeredgecolor='steelblue', markeredgewidth=2)
plt.title('Hollow square markers')
plt.show()

Stile di riempimento

Il parametro fillstyle controlla quale porzione del marker viene riempita. I valori validi sono 'full', 'left', 'right', 'bottom', 'top' e 'none'.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 5, 1]

plt.plot(x, y, marker='o', markersize=16, fillstyle='left', markerfacecolor='crimson', markeredgecolor='black')
plt.title('Half-filled circle markers (fillstyle="left")')
plt.show()

Controllo per punto con scatter()

plot() applica un marker uniforme all'intera linea. Quando è necessario che ogni punto abbia dimensioni o colore diversi — ad esempio per codificare una terza variabile — usa scatter() al suo posto.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
sizes  = [40, 100, 200, 80, 160]   # area in points²
colors = [0.2, 0.5, 0.8, 0.3, 0.9]  # mapped through colormap

sc = plt.scatter(x, y, s=sizes, c=colors, cmap='plasma', edgecolors='black')
plt.colorbar(sc, label='Value')
plt.title('Per-point size and color with scatter()')
plt.show()

Differenze principali tra plot() e scatter() per i marker:

Caratteristicaplot()scatter()
Forma del markerUguale per tutti i puntiUguale per tutti i punti
Dimensione del markerUniformePer punto (array s)
Colore del markerUniformePer punto (array c + mappa colori)
Prestazioni su grandi datasetPiù velocePiù lento

Più serie di dati con marker diversi

Usa chiamate separate a plot() per assegnare un marker distinto a ogni serie, poi aggiungi una legenda:

import matplotlib.pyplot as plt

months = [1, 2, 3, 4, 5, 6]
product_a = [120, 135, 110, 150, 140, 160]
product_b = [80,  95, 100,  90, 115, 130]
product_c = [60,  70,  65,  85,  90,  95]

plt.plot(months, product_a, marker='o', label='Product A')
plt.plot(months, product_b, marker='s', label='Product B')
plt.plot(months, product_c, marker='^', label='Product C')

plt.xlabel('Month')
plt.ylabel('Units sold')
plt.title('Monthly sales by product')
plt.legend()
plt.show()

Marker senza linea di collegamento

Passando linestyle='None' (o ls='None') si rimuove la linea e si lasciano solo i marker — ottenendo di fatto un grafico a dispersione usando plot().

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [3, 1, 4, 1, 5, 9, 2, 6]

plt.plot(x, y, marker='D', linestyle='None', color='darkorange', markersize=10)
plt.title('Diamond markers, no line')
plt.show()

Questo schema è utile quando l'ordine dei punti dati è importante (mantenendo l'ordinamento originale di x) ma non si vuole una linea che implichi un andamento continuo.

Consigli pratici

  • Adatta il marker alla densità dei dati. Usa marker piccoli ('.' o ',') quando si rappresentano migliaia di punti; forme più grandi ('o', 's') per poche misurazioni.
  • Garantisci il contrasto. Su sfondi bianchi, un markeredgecolor scuro su un markerfacecolor chiaro mantiene ogni punto visibile anche a dimensioni ridotte.
  • Evita di sovraccaricare un singolo grafico. Più di cinque forme di marker distinte in un grafico rendono la legenda difficile da leggere — considera sottografici o il solo colore.
  • Usa scatter() per codificare una terza variabile. Array di dimensioni o colori mappati su una mappa colori comunicano una dimensione aggiuntiva senza aggiungere altre serie alla legenda.

Argomenti correlati

Was this page helpful?