Линейные графики и диаграммы рассеяния
Стройте графики для непрерывных данных с помощью ax.plot(), а для дискретных точек — с помощью ax.scatter(), настраивая цвет, маркер и стиль линии.
«Линейные графики и диаграммы рассеяния» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Линейные графики и диаграммы рассеяния: основные типы графиков
Линейные графики соединяют последовательные точки данных линией и идеально подходят для визуализации тенденций во времени или непрерывных функций. Диаграммы рассеяния отображают отдельные точки без соединяющих линий, поэтому отлично подходят для изучения взаимосвязей между двумя числовыми переменными. Оба типа создаются на объекте Matplotlib Axes: для линий используется ax.plot(), а для точек диаграммы рассеяния — ax.scatter().
ax.plot() для линейных графиков
ax.plot(x, y) рисует линию, соединяющую точки данных по порядку. Передайте значения x первым аргументом, а значения y — вторым. В обоих случаях можно использовать списки Python, массивы NumPy или ряды Pandas. Если передан только один аргумент, Matplotlib автоматически использует индексы (0, 1, 2, ...) в качестве значений оси x. Метод возвращает список объектов Artist типа Line2D.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y) # basic line plot
ax.set_title('Sine Wave')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
# plt.show()
plt.close()Настройка стиля и цвета линии
Наиболее распространённые именованные аргументы ax.plot(): color (название, шестнадцатеричное значение или кортеж RGB), linewidth (или lw), linestyle (или ls): '-' — сплошная линия, '--' — штриховая, ':' — точечная, '-.' — штрихпунктирная; marker (форма в каждой точке данных) и markersize. Объедините linestyle и marker, чтобы одновременно показать линию и отдельные точки данных.
fig, ax = plt.subplots(figsize=(7, 4))
# Solid blue line with circle markers
ax.plot(x, np.sin(x), color='steelblue', lw=2, ls='-',
marker='o', markersize=4, label='sin(x)')
# Dashed red line
ax.plot(x, np.cos(x), color='crimson', lw=1.5, ls='--', label='cos(x)')
ax.legend()
plt.close()Построение нескольких линий
Вызывайте ax.plot() несколько раз, чтобы наложить несколько линий на одни и те же Axes. Matplotlib автоматически перебирает цвета стандартной палитры. Всегда передавайте именованный аргумент label для каждой линии, чтобы ax.legend() мог автоматически добавить их в легенду. Вызывайте легенду после всех вызовов построения, чтобы в неё вошли все линии.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
dates = pd.date_range('2024-01', periods=12, freq='ME')
fig, ax = plt.subplots(figsize=(8, 4))
for product in ['A', 'B', 'C']:
sales = np.random.randint(50, 200, 12)
ax.plot(dates, sales, marker='o', label=f'Product {product}')
ax.set_title('Monthly Sales by Product')
ax.legend()
plt.close()Непосредственное построение графиков из DataFrames Pandas
У DataFrames Pandas есть метод .plot(), который напрямую создаёт графики Matplotlib. Передайте ax=ax, чтобы рисовать на уже существующем объекте Axes. Вызов df.plot(ax=ax) отображает все столбцы как отдельные линии, используя индекс DataFrame в качестве оси x. После этого Вы по-прежнему можете применять к объекту ax любые настройки Matplotlib.
df = pd.DataFrame(
np.random.randn(12, 3),
index=pd.date_range('2024', periods=12, freq='ME'),
columns=['North', 'South', 'West']
).cumsum()
fig, ax = plt.subplots(figsize=(8, 4))
df.plot(ax=ax, linewidth=1.5)
ax.set_title('Cumulative Revenue by Region')
ax.set_ylabel('Revenue (cumulative)')
plt.close()ax.scatter() для диаграмм рассеяния
ax.scatter(x, y) рисует отдельные точки без соединяющих линий. В отличие от ax.plot(), scatter не предполагает, что данные упорядочены. Основные параметры: c (цвет; может быть массивом для задания цвета каждой точки), s (размер точки; также может быть массивом), cmap (цветовая карта, когда c содержит числа), alpha (прозрачность от 0 до 1 для работы с наложением точек).
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, color='steelblue', alpha=0.6, s=40)
ax.set_xlabel('Feature X')
ax.set_ylabel('Target Y')
ax.set_title('Feature vs Target')
plt.close()Окрашивание точек диаграммы рассеяния по категориям
Передайте числовой массив параметру c и цветовую карту cmap, чтобы окрашивать точки диаграммы рассеяния в соответствии с третьей переменной. Добавьте цветовую шкалу с помощью plt.colorbar(scatter_obj). Если параметр s (размер) также изменяется в зависимости от четвёртой переменной, этот приём называют разновидностью пузырьковой диаграммы.
categories = np.random.choice([0, 1, 2], size=100)
fig, ax = plt.subplots(figsize=(6, 5))
scatter = ax.scatter(x, y, c=categories, cmap='Set1',
alpha=0.7, s=60, edgecolors='none')
fig.colorbar(scatter, ax=ax, label='Category')
ax.set_title('Scatter Coloured by Category')
plt.close()Добавление линии тренда
Диаграмма рассеяния с подобранной линией тренда показывает и отдельные точки данных, и общую закономерность. Используйте np.polyfit(x, y, 1) для вычисления линейного приближения, вычислите его значения с помощью np.poly1d(coeffs)(x_range), а затем наложите результат на диаграмму рассеяния с помощью ax.plot(). Линия тренда должна быть тоньше и иметь другой стиль, чтобы отличаться от точек данных.
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, alpha=0.4, s=30, color='steelblue', label='Data')
# Fit and plot linear trend line
coeffs = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
y_line = np.poly1d(coeffs)(x_line)
ax.plot(x_line, y_line, color='red', lw=2, label='Linear fit')
ax.legend()
ax.set_title('Scatter with Trend Line')
plt.close()Заштрихованные доверительные интервалы с помощью fill_between
ax.fill_between(x, y_lower, y_upper) заполняет область между двумя кривыми. Этот приём часто используют для отображения доверительных интервалов вокруг средней линии, диапазонов стандартного отклонения или областей между минимумом и максимумом. Передайте параметр alpha, чтобы сделать заливку полупрозрачной и сохранить видимость исходных данных.
x_range = np.linspace(0, 2 * np.pi, 100)
mean = np.sin(x_range)
upper = mean + 0.2
lower = mean - 0.2
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_range, mean, color='steelblue', lw=2, label='Mean')
ax.fill_between(x_range, lower, upper,
color='steelblue', alpha=0.2, label='±0.2 band')
ax.legend()
ax.set_title('Line with Confidence Band')
plt.close()Пределы осей и линии сетки
Управляйте видимым диапазоном с помощью ax.set_xlim(min, max) и ax.set_ylim(min, max). Включайте линии сетки с помощью ax.grid(True). Настраивайте сетку именованными аргументами: linestyle, linewidth, alpha. Ненавязчивая сетка с alpha=0.3 помогает считывать точные значения, не перегружая график. Вызовите ax.set_axisbelow(True), чтобы сетка отображалась за точками данных.
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, np.sin(x), 'b-', lw=2)
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.2, 1.2)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_axisbelow(True) # grid behind data
ax.set_title('Sine with Grid')
plt.close()Прозрачность и наложение точек
Когда множество точек данных перекрывается в одной области диаграммы рассеяния, отдельные точки становятся невидимыми — это называется наложением точек. Самое простое решение — уменьшить непрозрачность с помощью alpha (0.0 = полностью прозрачно, 1.0 = полностью непрозрачно). Установите alpha=0.3 или меньше: плотные области будут выглядеть темнее, поскольку полупрозрачные точки накладываются друг на друга, а разреженные области останутся светлыми. Для очень больших наборов данных (миллионы точек) вместо этого рассмотрите гексагональное разбиение или оценки ядерной плотности.
np.random.seed(1)
x_dense = np.random.randn(1000)
y_dense = np.random.randn(1000)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
# Without alpha: overplotting hides density
ax1.scatter(x_dense, y_dense, s=10)
ax1.set_title('No alpha (overplotted)')
# With alpha: density visible
ax2.scatter(x_dense, y_dense, s=10, alpha=0.2)
ax2.set_title('alpha=0.2 (density visible)')
plt.tight_layout()
plt.close()Быстрая проверка
Проверьте своё понимание линейных графиков и диаграмм рассеяния в Matplotlib по материалам этого урока.
Итоги урока
В этом уроке Вы узнали: ax.plot() создаёт линейные графики с полным управлением цветом, стилем линии и маркерами; ax.scatter() создаёт диаграммы рассеяния с настройкой цвета и размера каждой точки через c и s; ax.fill_between() добавляет доверительные интервалы; а ax.grid() добавляет линии сетки для удобства чтения. Далее Вы научитесь создавать столбчатые диаграммы и гистограммы для визуализации категориальных данных и распределений.
Часто задаваемые вопросы
Урок «Линейные графики и диаграммы рассеяния» бесплатный?
Да — полный текст урока «Линейные графики и диаграммы рассеяния» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Чему я научусь в уроке «Линейные графики и диаграммы рассеяния»?
Стройте графики для непрерывных данных с помощью ax.plot(), а для дискретных точек — с помощью ax.scatter(), настраивая цвет, маркер и стиль линии. Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?
Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Линейные графики и диаграммы рассеяния»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?
Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура Figure и Axes
- Линейные графики и диаграммы рассеяния
- Столбчатые диаграммы и гистограммы
- Подписи, заголовки и сохранение графиков