Matplotlib Cheat Sheet
Ultimo aggiornamento
Figure e axes
Una figure è l'intera immagine. Un axes è un singolo grafico al suo interno, e quasi tutte le chiamate qui sotto sono metodi di ax.
| Attività | Codice |
|---|---|
| Importare pyplot | import matplotlib.pyplot as plt |
| Una figure con un grafico | fig, ax = plt.subplots() |
| Impostare la dimensione in pollici | fig, ax = plt.subplots(figsize=(8, 4)) |
| Disegnare sugli axes | ax.plot(x, y) |
| Mostrare la figure | plt.show() |
| Salvare come PNG nitido | fig.savefig("chart.png", dpi=150, bbox_inches="tight") |
| Salvare in grafica vettoriale | fig.savefig("chart.svg"), fig.savefig("chart.pdf") |
| Sfondo trasparente | fig.savefig("chart.png", transparent=True) |
| Chiudere una figure per liberare memoria | plt.close(fig) |
| Stile pyplot rapido per un grafico | plt.plot(x, y)
plt.title("Quick look")
plt.show() |
Tipi di grafico
| Attività | Codice |
|---|---|
| Grafico a linee | ax.plot(x, y) |
| Grafico a dispersione | ax.scatter(x, y, s=20, alpha=0.7) |
| Dispersione colorata per valore, con barra colori | points = ax.scatter(x, y, c=y, cmap="viridis")
fig.colorbar(points, ax=ax) |
| Grafico a barre | ax.bar(cats, a) |
| Grafico a barre orizzontali | ax.barh(cats, a) |
| Barre in pila | ax.bar(cats, a, label="2025")
ax.bar(cats, b, bottom=a, label="2026") |
| Barre raggruppate | pos = np.arange(len(cats))
ax.bar(pos - 0.2, a, width=0.4)
ax.bar(pos + 0.2, b, width=0.4)
ax.set_xticks(pos, labels=cats) |
| Istogramma | ax.hist(data, bins=30) |
| Box plot | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) |
| Violin plot | ax.violinplot([data, data * 2]) |
| Grafico a torta | ax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%") |
| Banda tra due curve | ax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3) |
| Barre di errore | ax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4) |
| Grafico a gradini | ax.step(x, y, where="mid") |
| Heatmap di un array 2D | image = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma")
fig.colorbar(image, ax=ax) |
| Grafico a contorni riempiti | X, Y = np.meshgrid(x, x)
ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20) |
| Densità di molti punti | ax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20) |
| Linea di riferimento orizzontale o verticale | ax.axhline(0, color="gray", linestyle="--"), ax.axvline(5) |
| Evidenziare un intervallo | ax.axvspan(2, 4, alpha=0.2) |
Linee, marker e colori
| Attività | Codice |
|---|---|
| Colore, spessore e stile della linea | ax.plot(x, y, color="tab:red", linewidth=2, linestyle="--") |
| Marker sui punti | ax.plot(x, y, marker="o", markersize=4) |
| Stringa di formato breve | ax.plot(x, y, "g--o") |
| Trasparenza | ax.plot(x, y, alpha=0.5) |
| Stili di linea | "-", "--", "-.", ":" |
| Codici dei marker | "o", "s", "^", "x", ".", "*" |
| Modi per indicare un colore | "tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6) |
| n colori da una colormap | colors = plt.colormaps["viridis"](np.linspace(0, 1, 5)) |
| Il tuo ciclo di colori | ax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"]) |
| Barre con bordo e tratteggio | ax.bar(cats, a, color="white", edgecolor="black", hatch="//") |
Titoli, etichette e legende
| Attività | Codice |
|---|---|
| Titolo ed etichette degli assi | ax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR") |
| Tutto in una sola chiamata | ax.set(title="Sales", xlabel="Month", ylabel="EUR") |
| Legenda dalle etichette delle linee | ax.plot(x, y, label="sin")
ax.legend() |
| Posizione e colonne della legenda | ax.legend(loc="upper right", ncols=2, frameon=False) |
| Legenda fuori dal grafico | ax.legend(loc="center left", bbox_to_anchor=(1, 0.5)) |
| Testo in una posizione dei dati | ax.text(5, 0.5, "note") |
| Annotazione con freccia | ax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->")) |
| Valori sulle barre | bars = ax.bar(cats, a)
ax.bar_label(bars) |
| Titolo dell'intera figure | fig.suptitle("Q1 report") |
| Formule matematiche nelle etichette | ax.set_xlabel(r"$\alpha$ (rad)") |
Assi, tick e scale
| Attività | Codice |
|---|---|
| Limiti degli assi | ax.set_xlim(0, 10), ax.set_ylim(bottom=0) |
| Scala logaritmica | ax.set_yscale("log") |
| Scegliere i tick e le loro etichette | ax.set_xticks([0, 5, 10], labels=["start", "middle", "end"]) |
| Ruotare le etichette dei tick | ax.tick_params(axis="x", labelrotation=45) |
| Griglia | ax.grid(True, alpha=0.3) |
| Asse in percentuale | from matplotlib.ticker import PercentFormatter
ax.yaxis.set_major_formatter(PercentFormatter(1.0)) |
| Separatore delle migliaia | ax.yaxis.set_major_formatter("{x:,.0f}") |
| Nascondere i bordi superiore e destro | ax.spines[["top", "right"]].set_visible(False) |
| Secondo asse y a destra | ax2 = ax.twinx()
ax2.plot(x, y * 100, color="tab:orange") |
| Stessa scala su entrambi gli assi | ax.set_aspect("equal") |
| Invertire un asse | ax.invert_yaxis() |
| Nascondere completamente gli assi | ax.axis("off") |
| Etichette delle date leggibili | fig.autofmt_xdate() |
Subplot e layout
plt.subplots(rows, cols) restituisce un array NumPy di axes. Indicizzalo come un array.
| Attività | Codice |
|---|---|
| Griglia di grafici | fig, axs = plt.subplots(2, 2, figsize=(8, 6)) |
| Disegnare su uno di essi | axs[0, 1].plot(x, y) |
| Ciclare su tutti | for ax in axs.flat:
ax.grid(True) |
| Condividere un asse tra grafici | fig, axs = plt.subplots(1, 3, sharey=True) |
| Spaziatura senza sovrapposizioni | fig, axs = plt.subplots(2, 2, layout="constrained") |
| Correggere le sovrapposizioni dopo il disegno | fig.tight_layout() |
| Colonne di larghezza diversa | fig, axs = plt.subplots(1, 2, width_ratios=[3, 1]) |
| Layout con nomi e un pannello largo | fig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]])
axd["top"].plot(x, y) |
| Piccolo grafico dentro un grafico | inset = ax.inset_axes([0.6, 0.6, 0.35, 0.35]) |
| Nascondere un pannello vuoto | axs[0].axis("off") |
Stili e impostazioni predefinite
| Attività | Codice |
|---|---|
| Usare uno stile integrato | plt.style.use("ggplot") |
| Elencare gli stili | plt.style.available |
| Aspetto seaborn senza seaborn | plt.style.use("seaborn-v0_8-whitegrid") |
| Stile per una sola figure | with plt.style.context("dark_background"):
fig, ax = plt.subplots() |
| Dimensione predefinita del font | plt.rcParams["font.size"] = 12 |
| Dimensione e risoluzione predefinite della figure | plt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120 |
| Tornare ai valori predefiniti | plt.style.use("default") |
| Colormap comuni: sequenziale, divergente, grigi | "viridis", "coolwarm", "Greys" |
Grafici da pandas
pandas disegna con Matplotlib. Passa ax= per disegnare nei tuoi axes, oppure tieni l'ax che pandas restituisce.
| Attività | Codice |
|---|---|
| Colonne di un DataFrame nei tuoi axes | df.plot(x="month", y="sales", ax=ax) |
| Grafico a barre di un riepilogo per gruppo | df.groupby("city")["sales"].sum().plot.bar(ax=ax) |
| Continuare a personalizzare il grafico di pandas | ax = df.plot(x="month", y="sales")
ax.set_title("Sales") |
| Colonne direttamente in Matplotlib | ax.plot(df["month"], df["sales"]) |
Matplotlib 3.11: vecchie forme e cosa scrivere ora
Il codice copiato da tutorial più vecchi può dare errore o avvisi in Matplotlib 3.11. Usa invece le forme della colonna Matplotlib 3.11.
| Attività | Matplotlib 3.11 | Vecchia forma |
|---|---|---|
| Etichette del box plot | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) | labels=["A", "B"] |
| Box plot o violin plot orizzontale | ax.boxplot(data, orientation="horizontal") | vert=False |
| Ottenere una colormap | plt.colormaps["viridis"] | plt.cm.get_cmap("viridis") |
| Stile seaborn | plt.style.use("seaborn-v0_8") | plt.style.use("seaborn") |
Il codice Matplotlib che ti serve per trasformare i dati in un grafico chiaro, raggruppato per attività: figure e axes, tipi di grafico, linee e colori, titoli e legende, assi e tick, subplot e layout, stili e grafici da pandas. Ogni riga è un breve snippet da incollare, con una riga che spiega cosa fa.
Tutto usa lo stile a oggetti (fig, ax = plt.subplots(), poi i metodi su ax) ed è scritto per Matplotlib 3.11, la versione che usa Coddy. Le forme più vecchie, come labels= in boxplot, compaiono solo nell'ultima tabella, accanto a cosa scrivere al loro posto. Gli esempi usano x = np.linspace(0, 10, 50), y = np.sin(x) e un campione di valori normali chiamato data. Sei alle prime armi con Python? Parti dal Python cheat sheet, e tieni a portata di mano anche i cheat sheet di pandas, NumPy e scikit-learn.
FAQ sul cheat sheet di Matplotlib
Questo cheat sheet di Matplotlib è gratuito?
Qual è la differenza tra plt e ax?
plt.plot() disegna sugli axes correnti, comodo per un singolo grafico. fig, ax = plt.subplots() ti dà la figure e gli axes come oggetti, quindi ax.plot() disegna sempre esattamente dove vuoi. Usa lo stile ax per tutto ciò che ha più di un grafico e per il codice che vuoi conservare.Come cambio la dimensione della figure?
figsize in pollici quando crei la figure: fig, ax = plt.subplots(figsize=(10, 5)). Per cambiare il valore predefinito di tutte le figure, imposta plt.rcParams["figure.figsize"] = (10, 5). La dimensione in pixel di un file salvato è figsize per dpi.Come salvo un grafico ad alta risoluzione?
fig.savefig("chart.png", dpi=300, bbox_inches="tight"). Un dpi più alto dà un PNG più nitido, e bbox_inches="tight" elimina i margini vuoti. Per la stampa o le slide, salva in SVG o PDF, che restano nitidi a qualsiasi dimensione.Perché titoli ed etichette dei miei subplot si sovrappongono?
layout="constrained", come in plt.subplots(2, 2, layout="constrained"), e Matplotlib farà spazio a titoli, etichette e barre dei colori. Su una figure già esistente, chiama fig.tight_layout() dopo aver disegnato.Quale versione di Matplotlib copre questo cheat sheet?
labels= in boxplot (ora tick_labels=) e plt.cm.get_cmap (ora plt.colormaps[...]), sono nell'ultima tabella accanto a cosa scrivere al loro posto.