Нашли ошибку?
продвинутыйpandas 3.0.6

Обзор .plot

Быстрый график прямо из таблицы — линии, столбцы, гистограмма, диаграмма рассеяния.

Нужно знать:DataFrameset_index и reset_index

Содержание статьи

Коротко

  • 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 — все числовые столбцыNone
titleзаголовок графикаNone
figsizeразмер в дюймах: (ширина, высота)None
rotповорот подписей по оси 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.

Только текстовые столбцыошибка: TypeError
pd.DataFrame({"month": ["янв", "фев"], "cups": ["120", "135"]}).plot()   # числа прочитаны как текст
Ошибка
TypeError: no numeric data to plot