Коротко
df.plot()рисует линию для каждого числового столбца; по оси X — индекс.- Вид графика — через
kind=…или методыdf.plot.bar(),.barh(),.hist(),.scatter(x, y),.area(),.box(),.pie(). - Рисует библиотека matplotlib — её нужно установить отдельно.
.plotвозвращает объект осей (Axes): через него настраивают подписи и сохраняют картинку. - Для графика по категориям удобен длинный или сводный формат: сначала pivot_table или
groupby, потом.plot. - В Jupyter график показывается сам; в скрипте —
import matplotlib.pyplot as plt; plt.show()или сохранение в файл.
Синтаксис
df.plot(kind="line", x=None, y=None, title=None, figsize=None)
df.plot.bar(rot=0), df.plot.barh(), df.plot.area()
s.plot.hist(bins=10)
df.plot.scatter(x="a", y="b")
ax = df.plot(); ax.set_ylabel("…"); ax.figure.savefig("chart.png")Параметры
ПараметрЧто делаетПо умолчанию
kind"line", "bar", "barh", "hist", "box", "area", "scatter", "pie""line"x, yстолбцы для осей; по умолчанию x — индекс, y — все числовые столбцыNonetitleзаголовок графикаNonefigsizeразмер в дюймах: (ширина, высота)Nonerotповорот подписей по оси X в градусахNoneПримеры
Графики нарисованы при проверке справочника — тем же кодом, что в примере; цвета подобраны под тёмную тему сайта. Сам .plot возвращает объект осей (<Axes: …>) — в Jupyter его текст виден над картинкой.
sales = pd.DataFrame(
{"latte": [120, 135, 150, 142], "tea": [80, 70, 65, 90]},
index=pd.Index(["янв", "фев", "мар", "апр"], name="month"),
)sales.plot(title="Продажи по месяцам") # линии: по одной на столбецГрафик
sales.plot.bar(rot=0) # или kind="bar"График
sales["latte"].plot.barh(color="tab:orange")График
rng = np.random.default_rng(1)
pd.Series(rng.normal(170, 8, 500)).plot.hist(bins=20)График
sales.plot.scatter(x="latte", y="tea")График
ax = sales.plot.area(alpha=0.5)
ax.set_ylabel("чашек")
ax.figure.savefig("sales.png", dpi=120) # сохранить в файлГрафик
Подводные камни
matplotlib не установлен
pandas не ставит matplotlib сам, а без него .plot падает с ImportError: matplotlib is required for plotting…. Установите pip install matplotlib.
Нечисловые столбцы
Текстовые столбцы в график не попадают. Если числовых столбцов нет совсем, .plot падает — проверьте типы через df.dtypes.
pd.DataFrame({"month": ["янв", "фев"], "cups": ["120", "135"]}).plot() # числа прочитаны как текстОшибка
TypeError: no numeric data to plot