lineplot в Seaborn: ряды, тренды и полоса доверия
lineplot соединяет точки линией, когда по оси X идёт время: тренд, несколько городов на одном графике и полоса доверия вокруг среднего при повторных измерениях.
Редакция Питоники
Синоптики ведут журнал две недели: Сочи против Казани, каждый день — строка таблицы. Числа в столбце показывают температуру, но не показывают движение: растёт ли тепло, где холоднее и насколько уверенно мы это утверждаем. Всё это даёт lineplot — главный график для рядов, где по оси X идёт время или порядок.
Данные: температура двух городов
import pandas as pd
week = pd.DataFrame({
"day": list(range(1, 11)),
"sochi": [24, 25, 26, 24, 23, 25, 27, 28, 26, 27],
"kazan": [14, 12, 15, 17, 16, 13, 15, 18, 16, 17],
})
print(week)
day sochi kazan 0 1 24 14 1 2 25 12 2 3 26 15 3 4 24 17 4 5 23 16 5 6 25 13 6 7 27 15 7 8 28 18 8 9 26 16 9 10 27 17
Десять дней, две колонки температур. Пока это просто числа — тренд придётся вычитывать глазами по столбцу.
lineplot: линия по порядку оси X
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
week = pd.DataFrame({
"day": list(range(1, 11)),
"sochi": [24, 25, 26, 24, 23, 25, 27, 28, 26, 27],
"kazan": [14, 12, 15, 17, 16, 13, 15, 18, 16, 17],
})
sns.set_theme()
ax = sns.lineplot(data=week, x="day", y="sochi", marker="o")
ax.set_title("Сочи: температура за 10 дней")
ax.set_xlabel("День")
ax.set_ylabel("Температура, C")
plt.show()
График отображается под редактором
Точки соединились линией, кружки marker="o" отметили дни измерений, оси подписались именами столбцов. Динамика читается мгновенно: потепление с дня 5-го, пик 28 градусов на восьмой день. Пока это тот же график, что в уроке 1 — но именно на рядах проявляется важная особенность lineplot.
Несколько линий: два города
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
week = pd.DataFrame({
"day": list(range(1, 11)),
"sochi": [24, 25, 26, 24, 23, 25, 27, 28, 26, 27],
"kazan": [14, 12, 15, 17, 16, 13, 15, 18, 16, 17],
})
sns.set_theme()
fig, ax = plt.subplots()
sns.lineplot(data=week, x="day", y="sochi", ax=ax, label="Сочи", marker="o")
sns.lineplot(data=week, x="day", y="kazan", ax=ax, label="Казань", marker="o")
ax.set_title("Сочи против Казани: 10 дней")
ax.set_xlabel("День")
ax.set_ylabel("Температура, C")
plt.show()
График отображается под редактором
Здесь два новых приёма. Параметр ax= говорит Seaborn, на какие оси рисовать: сначала мы создали пару figure-axes через plt.subplots(), а потом отправили на неё обе линии — иначе каждый вызов получил бы отдельную картинку. Параметр label= даёт линии имя, и легенда собралась сама, без ручных вызовов. Обе линии делят одну ось Y, поэтому сравнение честное: Сочи стабильно на 8–12 градусов теплее, разрыв между городами виден на всём отрезке.
Полоса доверия: несколько наблюдений на точку
Реальный даталоггер пишет не раз в день, а трижды: утром, в полдень и вечером. На каждый день приходится несколько наблюдений — и lineplot делает то, чего не умеет plt.plot: усредняет их и показывает надёжность среднего.
import pandas as pd
meas = pd.DataFrame({
"day": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
"temp": [18, 22, 20, 21, 25, 23, 19, 24, 21, 22, 27, 24],
})
print(meas)
day temp 0 1 18 1 1 22 2 1 20 3 2 21 4 2 25 5 2 23 6 3 19 7 3 24 8 3 21 9 4 22 10 4 27 11 4 24
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
meas = pd.DataFrame({
"day": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
"temp": [18, 22, 20, 21, 25, 23, 19, 24, 21, 22, 27, 24],
})
sns.set_theme()
ax = sns.lineplot(data=meas, x="day", y="temp", marker="o")
ax.set_title("Среднесуточная температура и её разброс")
ax.set_xlabel("День")
ax.set_ylabel("Температура, C")
plt.show()
График отображается под редактором
Что произошло. По двенадцати строкам lineplot посчитал среднее для каждого дня — 20.0, 23.0, 21.3, 24.3 градуса — и провёл линию через четыре средних. Вокруг линии появилась полоса: 95-процентный доверительный интервал среднего. Полоса вокруг линии lineplot — это честная неуверенность среднего: чем сильнее прыгают наблюдения, тем она шире. День 3 с разбросом от 19 до 24 нарисовал заметно более широкую полосу, чем день 2, где измерения плотнее.
Что дальше
Вы собрали полный набор линейных приёмов: линия по времени, несколько рядов через ax= и label=, полоса доверия как мера надёжности. Осталось оформление: следующий урок — set_theme и контекст, пять тем Seaborn, крупный шрифт для презентаций и снятие лишнего декора.
lineplot усредняет повторные наблюдения сам: линия — среднее по точке, полоса — интервал, в котором среднее лежит с вероятностью 95%.
Сначала предскажи ответ в голове — это главный навык программиста.
import pandas as pd
week = pd.DataFrame({
"day": [1, 2, 3],
"temp": [18, 22, 20],
})
print(week["temp"].mean())
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
week = pd.DataFrame({
"day": [1, 2, 3, 4],
"sochi": [24, 25, 26, 24],
"kazan": [14, 12, 15, 17],
})
fig, ax = plt.subplots()
sns.lineplot(data=week, x="day", y="sochi", ax=ax)
sns.lineplot(data=week, x="day", y="kazan", ax=ax)
print(len(ax.lines))
1. Когда выбирают lineplot, а не scatterplot?
2. Чем lineplot отличается от plt.plot на неотсортированных по дате данных?
3. Как нарисовать две линии на одном графике?
4. Откуда берётся полоса вокруг линии lineplot?
5. Как оставить только линию без доверительной полосы?
Постройте на одном графике две линии температуры за неделю: Москву и Казань (данные в заготовке). Обе линии — с маркерами "o" и подписями в легенде через label=.
Как построить график lineplot по датам, а не по номерам дней?
Точно так же: положите даты в столбец и передайте его имя в x=. pandas парсит даты функцией pd.to_datetime, Seaborn расставит подписи оси сам. Важно только, чтобы столбец был датой или числом: строка «01.06.2026» без преобразования сортируется как текст.
Урок 7: темы и контекстЧто означает полоса вокруг линии в seaborn lineplot?
Это 95-процентный доверительный интервал среднего. Он появляется, когда на одно значение X приходится несколько наблюдений: lineplot сам усредняет их и показывает, насколько среднее надёжно. Широкая полоса — большой разброс или мало наблюдений, узкая — измерения согласованы.
Как убрать закрашенную полосу вокруг линии?
Параметром errorbar=None: sns.lineplot(data=df, x="day", y="temp", errorbar=None). Полезно и когда повторов на точку нет, и когда полоса отвлекает от сравнения нескольких линий. Старые примеры из интернета используют ci=False — в Seaborn 0.13+ этот параметр устарел.
Почему lineplot соединил точки не в том порядке, в котором они в таблице?
Потому что он сортирует точки по оси X (sort=True): линия всегда идёт слева направо по возрастанию X. plt.plot, напротив, соединяет строки как лежат. Если данные неотсортированы по времени, lineplot нарисует правильную линию, а plt.plot — зигзаг.
Понравился урок? Сошлитесь на него
«Полоса вокруг линии lineplot — это честная неуверенность среднего: чем сильнее прыгают наблюдения, тем она шире.»
Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.
Что читать дальше
Seaborn · Урок 5
scatterplot в Seaborn: связь двух величин на точках
Диаграмма рассеяния показывает связь двух числовых столбцов: одна строка таблицы — одна точка. Управляем размером s и прозрачностью alpha и учимся видеть кластеры.
Seaborn · Урок 7
Темы Seaborn: set_theme, стили и контекст графика
Пять тем Seaborn на один вызов: whitegrid для отчётов, darkgrid для экрана, ticks для строгих публикаций. Контекст talk укрупняет шрифты, despine снимает лишние линии рамки.
Matplotlib / Seaborn · Урок 2
Линейные графики в Matplotlib: plot, цвета, стили и подписи
plt.plot() под микроскопом: цвета, маркеры, стили линий, легенды, диапазоны осей и кейс с двумя температурными кривыми за месяц.
Похожие уроки по темам
Подобраны автоматически по пересечению тем и ключевых слов.
Pandas · Урок 9
Даты и временные ряды в Pandas: resample и rolling
Строки «01.07.2024» превращаются в настоящие даты, выручка агрегируется по неделям и месяцам через resample, а шум сглаживает rolling — строим тренд продаж магазина.
временные ряды pandasтренд продаж python
Matplotlib / Seaborn · Урок 10
Проект по визуализации: дашборд данных о фильмах на Matplotlib и Seaborn
Финальный проект курса: датасет из 200 фильмов, EDA, дашборд 2x2 с трендом, жанрами, гистограммой и scatter — плюс чек-лист «график готов к показу» и итоги десяти уроков.
matplotlib seabornлинейный график python matplotlib
Seaborn · Урок 1
Что такое Seaborn: первый график одной строкой
Seaborn — надстройка над Matplotlib: график из пары строк, тема и подписи осей из DataFrame прилагаются. Рисуем первый lineplot и сравниваем с ручным pyplot.
seaborn этоseaborn что это