Линейные графики: plot()

Линейные графики: plot() Matplotlib / Seaborn

Привет! Линейные графики — самый популярный способ визуализации данных. Они показывают тренды, изменения во времени и связи между переменными. В Matplotlib за это отвечает функция plot().

В этой статье мы разберём:

  • Как построить простой линейный график
  • Настройка цвета, стиля и толщины линии
  • Добавление маркеров и их настройка
  • Несколько линий на одном графике
  • Легенда, подписи и сетка
  • Практические примеры

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный Matplotlib (pip install matplotlib)
  • Базовое понимание графиков из предыдущих статей
  • Желание делать красивые линейные графики

Совет: plot() — самая часто используемая функция в Matplotlib. Освоив её, ты сможешь визуализировать большинство данных.

Основная часть

Простой линейный график

import matplotlib.pyplot as plt
import numpy as np

# Данные
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# Создаём график
plt.plot(x, y)
plt.title('Простой линейный график')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True)
plt.show()

Совет: plot() соединяет точки линиями. Если точки не отсортированы по X, линия будет запутанной.

Настройка линии

Цвет (color)

plt.plot(x, y, color='red')
plt.plot(x, y, color='#FF5733')  # HEX
plt.plot(x, y, color='blue')

Доступные цвета: 'red''blue''green''orange''purple''brown''pink''gray''black'.

Стиль линии (linestyle)

plt.plot(x, y, linestyle='-')   # Сплошная (по умолчанию)
plt.plot(x, y, linestyle='--')  # Пунктирная
plt.plot(x, y, linestyle='-.')  # Штрих-пунктирная
plt.plot(x, y, linestyle=':')   # Точечная

Толщина (linewidth)

plt.plot(x, y, linewidth=1)   # Тонкая
plt.plot(x, y, linewidth=2)   # Средняя
plt.plot(x, y, linewidth=4)   # Толстая

Сокращённый синтаксис

Можно комбинировать цвет и стиль в одной строке:

plt.plot(x, y, 'r--')   # Красная пунктирная
plt.plot(x, y, 'b-.')   # Синяя штрих-пунктирная
plt.plot(x, y, 'g:')    # Зелёная точечная

Совет: Сокращённый синтаксис удобен для быстрых графиков. Для сложных проектов лучше использовать явные параметры.

Маркеры на точках

Маркеры показывают фактические значения точек данных:

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y, marker='o', markersize=8)
plt.plot(x, y, marker='s', markersize=8)   # Квадрат
plt.plot(x, y, marker='^', markersize=8)   # Треугольник
plt.plot(x, y, marker='D', markersize=8)   # Ромб
plt.plot(x, y, marker='*', markersize=12)  # Звезда

Популярные маркеры:

МаркерОписание
'o'Круг
's'Квадрат
'^'Треугольник вверх
'v'Треугольник вниз
'D'Ромб
'*'Звезда
'x'Крест
'+'Плюс
'.'Точка

Совет: Маркеры помогают визуально выделить отдельные точки данных, особенно когда их немного.

Комбинирование параметров

x = np.linspace(0, 10, 20)
y = np.sin(x)

plt.plot(x, y, 
         color='#2E86C1', 
         linestyle='--', 
         linewidth=2, 
         marker='o', 
         markersize=6,
         markerfacecolor='white',
         markeredgecolor='#2E86C1',
         markeredgewidth=2)
plt.title('График с полной настройкой')
plt.show()

Совет: markerfacecolor и markeredgecolor позволяют сделать маркеры с контуром — это выглядит профессионально.

Несколько линий на одном графике

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * 0.5

# Первый способ: несколько plot()
plt.plot(x, y1, label='Синус')
plt.plot(x, y2, label='Косинус')
plt.plot(x, y3, label='Синус/2')
plt.legend()
plt.show()
# Второй способ: все данные в одном plot()
plt.plot(x, y1, x, y2, x, y3)
plt.show()

Совет: Для нескольких линий обязательно добавляй label и legend(), чтобы было понятно, что есть что.

Настройка осей

Границы осей

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# Ручная настройка границ
plt.xlim(0, 8)      # X от 0 до 8
plt.ylim(-1.5, 1.5) # Y от -1.5 до 1.5

plt.show()

Метки на осях

plt.plot(x, y)

# Настройка меток
plt.xticks([0, 2, 4, 6, 8, 10], ['Ноль', 'Два', 'Четыре', 'Шесть', 'Восемь', 'Десять'])
plt.yticks([-1, -0.5, 0, 0.5, 1])

plt.show()

Практический пример: временной ряд

import pandas as pd
import matplotlib.pyplot as plt

# Данные о продажах по месяцам
months = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек']
sales_2024 = [120, 130, 140, 160, 180, 200, 220, 210, 190, 170, 150, 140]
sales_2025 = [140, 150, 155, 170, 195, 220, 240, 235, 215, 190, 170, 160]

# Создаём фигуру
plt.figure(figsize=(10, 6))

# Графики
plt.plot(months, sales_2024, 
         label='2024', 
         color='#3498DB', 
         marker='o', 
         linewidth=2, 
         markersize=6)

plt.plot(months, sales_2025, 
         label='2025', 
         color='#E74C3C', 
         marker='s', 
         linewidth=2, 
         markersize=6,
         linestyle='--')

# Заголовок и подписи
plt.title('Сравнение продаж 2024 vs 2025', fontsize=16, fontweight='bold')
plt.xlabel('Месяц', fontsize=12)
plt.ylabel('Продажи (тыс. руб.)', fontsize=12)

# Сетка
plt.grid(True, linestyle='--', alpha=0.5)

# Легенда
plt.legend(loc='upper left', fontsize=12)

# Добавляем значения над точками
for i, value in enumerate(sales_2025):
    plt.text(i, value + 5, str(value), ha='center', fontsize=9, fontweight='bold')

plt.tight_layout()
plt.show()

Работа с неупорядоченными данными

Если данные не отсортированы по X, график может быть запутанным:

# Неупорядоченные данные
x = [3, 1, 4, 2, 5]
y = [9, 1, 16, 4, 25]

plt.plot(x, y, marker='o')
plt.title('Неупорядоченные данные — хаос')
plt.show()

# Отсортируем перед построением
x_sorted, y_sorted = zip(*sorted(zip(x, y)))
plt.plot(x_sorted, y_sorted, marker='o')
plt.title('Отсортированные данные — красота')
plt.show()

Совет: Всегда проверяй, что данные отсортированы по X, особенно при работе с временными рядами.

Заполнение области под графиком (fill_between)

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y, color='blue', linewidth=2)
plt.fill_between(x, y, alpha=0.3, color='blue')
plt.title('Заполнение под графиком')
plt.grid(True)
plt.show()

Несколько подграфиков с plot()

# Создаём 2x2 сетку подграфиков
fig, axes = plt.subplots(2, 2, figsize=(10, 8))

x = np.linspace(0, 10, 100)

# График 1: Синус
axes[0, 0].plot(x, np.sin(x), color='blue')
axes[0, 0].set_title('Синус')
axes[0, 0].grid(True)

# График 2: Косинус
axes[0, 1].plot(x, np.cos(x), color='red')
axes[0, 1].set_title('Косинус')
axes[0, 1].grid(True)

# График 3: Синус + Косинус
axes[1, 0].plot(x, np.sin(x), label='sin', color='blue')
axes[1, 0].plot(x, np.cos(x), label='cos', color='red')
axes[1, 0].set_title('Синус + Косинус')
axes[1, 0].legend()
axes[1, 0].grid(True)

# График 4: Тангенс (с ограничением)
y = np.tan(x)
y = np.clip(y, -10, 10)  # Ограничиваем выбросы
axes[1, 1].plot(x, y, color='green')
axes[1, 1].set_title('Тангенс')
axes[1, 1].set_ylim(-10, 10)
axes[1, 1].grid(True)

plt.tight_layout()
plt.show()

Задачи для закрепления

Задача 1. Построй линейный график для x = [1, 2, 3, 4]y = [10, 20, 25, 30].

Задача 2. Добавь на график синюю пунктирную линию толщиной 2.

Задача 3. Добавь на график маркеры в виде кругов размером 8.

Задача 4. Построй два графика на одной фигуре: y1 = x**2 и y2 = x**3.

Задача 5. Добавь легенду с подписями «Квадрат» и «Куб».

Ответы:

Задача 1.

x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y)
plt.show()

Задача 2.

plt.plot(x, y, color='blue', linestyle='--', linewidth=2)

Задача 3.

plt.plot(x, y, marker='o', markersize=8)

Задача 4.

x = np.linspace(0, 5, 50)
y1 = x**2
y2 = x**3
plt.plot(x, y1, label='Квадрат')
plt.plot(x, y2, label='Куб')

Задача 5.

plt.legend()

Нюансы и подводные камни

Порядок точек

Если данные не отсортированы по X, линия будет скакать. Всегда сортируй, если это имеет смысл.

Много линий на одном графике

При большом количестве линий график становится нечитаемым. Используй разные цвета, стили и ограничь количество.

Автоматическое масштабирование

Matplotlib пытается подобрать масштаб автоматически, но иногда нужно помочь через plt.ylim().

Частые ошибки и как их избежать

Ошибка 1: Забыл label и legend

# Непонятно, что за линии
plt.plot(x, y1)
plt.plot(x, y2)

# Добавляем подписи
plt.plot(x, y1, label='Линия 1')
plt.plot(x, y2, label='Линия 2')
plt.legend()

Ошибка 2: Слишком много данных без маркеров

# Трудно увидеть точки
plt.plot(x, y)

# Добавляем маркеры каждые N точек
plt.plot(x[::10], y[::10], marker='o')

Ошибка 3: Неправильный порядок аргументов

# Порядок: x, y
plt.plot(y, x)

# Правильно: x, y
plt.plot(x, y)

Шпаргалка

Что нужноКак пишется
Базовый графикplt.plot(x, y)
Цветcolor='red'
Стиль линииlinestyle='--'
Толщина линииlinewidth=2
Маркерmarker='o'
Размер маркераmarkersize=8
Сокращённый синтаксис'r--''bo-''g:'
Несколько линийplt.plot(x1, y1, x2, y2)
Легендаlabel='текст'plt.legend()
Границы по Xplt.xlim(0, 10)
Границы по Yplt.ylim(-1, 1)

Заключение

Сегодня мы научились:

  • Строить линейные графики с помощью plot()
  • Настраивать цвет, стиль и толщину линии
  • Добавлять маркеры и управлять их внешним видом
  • Отображать несколько линий на одном графике
  • Добавлять легенду и настраивать оси

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×