DataFrame.plot() / Series.plot() în pandas

Grafice pandas 1.0+

Desenează rapid grafice din tabele: linie, bare sau histogramă, folosind matplotlib, apoi le salvezi ca imagine.

Sintaxă
df.plot(x=None, y=None, kind='line', title=None, figsize=None, ...)

Ce face DataFrame.plot() / Series.plot()

df.plot() și serie.plot() desenează un grafic direct din date, cu ajutorul bibliotecii matplotlib. Aceasta nu se instalează odată cu pandas: rulează întâi pip install matplotlib, altfel apare ImportError.

Tipul graficului se alege cu kind: "line" (implicit, bun pentru evoluții în timp), "bar" și "barh" (bare verticale/orizontale, pentru comparații), "hist" (histogramă, pentru distribuția valorilor), "pie", "scatter". Există și forma scurtă df.plot.bar(). Indexul devine axa X, iar fiecare coloană numerică devine o serie din grafic.

Graficul se salvează cu plt.savefig("fisier.png") (după import matplotlib.pyplot as plt) sau se deschide într-o fereastră cu plt.show(). În Jupyter apare direct sub celulă.

Parametri

Parametru Descriere
kind Tipul graficului: "line", "bar", "barh", "hist", "box", "pie", "scatter", "area".
x, y La DataFrame: coloanele folosite pe axe (implicit indexul pe X și toate coloanele numerice pe Y).
title Titlul graficului.
figsize Mărimea în inci, de exemplu (8, 4).
bins La kind="hist": numărul de intervale.
xlabel, ylabel Textul de pe axe.

Ce returnează

Un obiect Axes din matplotlib (sau o listă de obiecte, cu subplots=True), pe care poți ajusta graficul.

Exemple

Exemplul 1: Grafic linie pentru vânzări pe luni

import pandas as pd
import matplotlib.pyplot as plt

vanzari = pd.DataFrame({"Iași": [120, 150, 90, 180], "Cluj": [100, 130, 160, 140]},
                       index=["ian", "feb", "mar", "apr"])
ax = vanzari.plot(kind="line", title="Vânzări pe luni (lei)", marker="o")
ax.set_xlabel("luna")
plt.savefig("vanzari.png")
print("Graficul a fost salvat în vanzari.png")

Rezultat (cu matplotlib instalat)

Graficul a fost salvat în vanzari.png

Exemplul 2: Grafic cu bare dintr-un groupby

import pandas as pd
import matplotlib.pyplot as plt

comenzi = pd.DataFrame({"oras": ["Iași", "Cluj", "Iași", "Brașov", "Cluj"],
                        "lei": [200, 350, 150, 120, 90]})
total = comenzi.groupby("oras")["lei"].sum().sort_values()
print(total)
total.plot(kind="bar", title="Total comenzi pe oraș", ylabel="lei")
plt.tight_layout()
plt.savefig("orase.png")
print("Salvat: orase.png")

Rezultat (cu matplotlib instalat)

oras
Brașov    120
Iași      350
Cluj      440
Name: lei, dtype: int64
Salvat: orase.png

Exemplul 3: Histogramă a notelor

plt.show() deschide o fereastră cu graficul; programul continuă după ce o închizi.

import pandas as pd
import matplotlib.pyplot as plt

note = pd.Series([5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10, 4])
note.plot(kind="hist", bins=7, title="Distribuția notelor")
print("Elevi:", len(note), "| media:", round(note.mean(), 2))
plt.show()

Rezultat (cu matplotlib instalat; graficul apare într-o fereastră)

Elevi: 12 | media: 7.25

Greșeli frecvente

  • Nu ai instalat matplotlib și primești ImportError la df.plot(). Rulează pip install matplotlib.
  • Rulezi scriptul din terminal și nu vezi nimic. În afara Jupyter, graficul apare doar cu plt.show() sau se salvează cu plt.savefig().
  • Apelezi plt.savefig() după plt.show() și primești o imagine goală: după închiderea ferestrei graficul nu mai există. Salvează înainte de show().
  • Coloana de valori este text, nu număr. plot() folosește doar coloanele numerice; transformă cu astype() sau pd.to_numeric().

Comenzi înrudite

  • DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.
  • value_counts(): Numără de câte ori apare fiecare valoare într-o coloană (sau fiecare combinație de valori pe rânduri), în ordine descrescătoare.
  • DataFrame.resample(): Grupează o serie de timp pe intervale (săptămâni, luni) și calculează câte o valoare pe interval: sumă, medie, număr.
  • pd.DataFrame(): Creează un tabel cu rânduri și coloane, dintr-un dicționar de liste, dintr-o listă de dicționare sau dintr-o listă de liste.