Что такое Matplotlib и зачем он нужен?
Matplotlib – это мощная библиотека Python для создания статических, анимированных и интерактивных визуализаций в Python. Она предоставляет широкие возможности для построения графиков, диаграмм и других типов визуализаций данных, необходимых в научных исследованиях, анализе данных и машинном обучении. Matplotlib позволяет создавать графики профессионального качества, которые можно использовать в публикациях, презентациях и веб-приложениях.
Обзор модуля pyplot и функции plt.plot()
pyplot – это модуль в Matplotlib, предоставляющий интерфейс, похожий на MATLAB, для создания графиков. Функция plt.plot() является основной командой в pyplot для построения линейных графиков. Она принимает на вход данные и опциональные аргументы для настройки внешнего вида графика (цвет, стиль линии, маркеры и т.д.).
Цель руководства: освоение команды plt.plot()
Цель этого руководства – предоставить исчерпывающую информацию о команде plt.plot() и научить вас эффективно использовать её для создания разнообразных графиков в Matplotlib. Мы рассмотрим основные и расширенные возможности plt.plot(), а также примеры её применения в различных задачах визуализации данных.
Основы использования plt.plot()
Простейший график: передача одного списка значений
В простейшем случае plt.plot() принимает один список (или массив) значений, которые будут отображены по оси Y. Ось X будет автоматически создана с использованием индексов элементов списка.
import matplotlib.pyplot as plt
from typing import List
def simple_plot(data: List[float]) -> None:
"""Создает простейший график на основе списка значений."""
plt.plot(data)
plt.show()
data = [1, 3, 2, 4]
simple_plot(data)
График по двум спискам: оси X и Y
Для отображения данных по обеим осям X и Y, необходимо передать два списка (или массива) в plt.plot(). Первый список будет соответствовать значениям по оси X, а второй – по оси Y.
import matplotlib.pyplot as plt
from typing import List
def xy_plot(x_data: List[float], y_data: List[float]) -> None:
"""Создает график на основе двух списков значений для X и Y."""
plt.plot(x_data, y_data)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
xy_plot(x_data, y_data)
Отображение нескольких графиков в одной области
Чтобы отобразить несколько графиков в одной области, достаточно вызвать plt.plot() несколько раз перед вызовом plt.show().
import matplotlib.pyplot as plt
from typing import List
def multiple_plots(x_data: List[float], y_data1: List[float], y_data2: List[float]) -> None:
"""Отображает два графика в одной области."""
plt.plot(x_data, y_data1, label='График 1')
plt.plot(x_data, y_data2, label='График 2')
plt.show()
x_data = [1, 2, 3, 4]
y_data1 = [1, 4, 9, 16]
y_data2 = [1, 2, 3, 4]
multiple_plots(x_data, y_data1, y_data2)
Добавление заголовка и меток осей
Для добавления заголовка и меток осей используются функции plt.title(), plt.xlabel() и plt.ylabel().
import matplotlib.pyplot as plt
from typing import List
def labeled_plot(x_data: List[float], y_data: List[float], title: str, xlabel: str, ylabel: str) -> None:
"""Создает график с заголовком и метками осей."""
plt.plot(x_data, y_data)
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
labeled_plot(x_data, y_data, 'Зависимость Y от X', 'X', 'Y')
Отображение легенды графика
Для отображения легенды графика необходимо добавить аргумент label в plt.plot() и вызвать функцию plt.legend().
import matplotlib.pyplot as plt
from typing import List
def plot_with_legend(x_data: List[float], y_data1: List[float], y_data2: List[float]) -> None:
"""Отображает два графика с легендой."""
plt.plot(x_data, y_data1, label='График 1')
plt.plot(x_data, y_data2, label='График 2')
plt.legend()
plt.show()
x_data = [1, 2, 3, 4]
y_data1 = [1, 4, 9, 16]
y_data2 = [1, 2, 3, 4]
plot_with_legend(x_data, y_data1, y_data2)
Настройка внешнего вида графика с помощью plt.plot()
Изменение цвета линии: аргумент color
Цвет линии можно изменить с помощью аргумента color. Можно использовать названия цветов (например, ‘red’, ‘green’, ‘blue’) или шестнадцатеричные коды (например, ‘#FF0000’).
import matplotlib.pyplot as plt
from typing import List
def colored_plot(x_data: List[float], y_data: List[float], color: str) -> None:
"""Создает график с заданным цветом линии."""
plt.plot(x_data, y_data, color=color)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
colored_plot(x_data, y_data, 'red')
Изменение стиля линии: аргумент linestyle
Стиль линии можно изменить с помощью аргумента linestyle. Доступные стили: ‘-‘, ‘—‘, ‘-.’, ‘:’.
import matplotlib.pyplot as plt
from typing import List
def styled_plot(x_data: List[float], y_data: List[float], linestyle: str) -> None:
"""Создает график с заданным стилем линии."""
plt.plot(x_data, y_data, linestyle=linestyle)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
styled_plot(x_data, y_data, '--')
Изменение толщины линии: аргумент linewidth
Толщину линии можно изменить с помощью аргумента linewidth.
import matplotlib.pyplot as plt
from typing import List
def thick_plot(x_data: List[float], y_data: List[float], linewidth: float) -> None:
"""Создает график с заданной толщиной линии."""
plt.plot(x_data, y_data, linewidth=linewidth)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
thick_plot(x_data, y_data, 2.0)
Использование маркеров: аргумент marker
Для добавления маркеров на график используется аргумент marker. Доступные маркеры: ‘o’, ‘x’, ‘+’, ‘.’, ‘*’.
import matplotlib.pyplot as plt
from typing import List
def marker_plot(x_data: List[float], y_data: List[float], marker: str) -> None:
"""Создает график с заданными маркерами."""
plt.plot(x_data, y_data, marker=marker)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
marker_plot(x_data, y_data, 'o')
Сокращенная запись параметров форматирования (fmt)
Можно использовать сокращенную запись параметров форматирования в виде строки fmt. Например, 'ro-' означает красную линию с маркерами ‘o’ и стилем линии ‘-‘.
import matplotlib.pyplot as plt
from typing import List
def fmt_plot(x_data: List[float], y_data: List[float], fmt: str) -> None:
"""Создает график с использованием сокращенной записи параметров форматирования."""
plt.plot(x_data, y_data, fmt)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
fmt_plot(x_data, y_data, 'ro-')
Расширенные возможности plt.plot()
Управление пределами осей: plt.xlim() и plt.ylim()
Функции plt.xlim() и plt.ylim() позволяют установить пределы осей X и Y соответственно.
import matplotlib.pyplot as plt
from typing import List, Tuple
def limited_plot(x_data: List[float], y_data: List[float], x_limits: Tuple[float, float], y_limits: Tuple[float, float]) -> None:
"""Создает график с заданными пределами осей."""
plt.plot(x_data, y_data)
plt.xlim(x_limits)
plt.ylim(y_limits)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
limited_plot(x_data, y_data, (0, 5), (0, 20))
Настройка делений на осях: plt.xticks() и plt.yticks()
Функции plt.xticks() и plt.yticks() позволяют настроить деления на осях X и Y соответственно. Например, можно задать конкретные значения и метки.
import matplotlib.pyplot as plt
from typing import List
def ticks_plot(x_data: List[float], y_data: List[float], xticks: List[float], yticks: List[float]) -> None:
"""Создает график с заданными делениями на осях."""
plt.plot(x_data, y_data)
plt.xticks(xticks)
plt.yticks(yticks)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
ticks_plot(x_data, y_data, [1, 2, 3, 4], [1, 4, 9, 16])
Добавление сетки: plt.grid()
Функция plt.grid() добавляет сетку на график.
import matplotlib.pyplot as plt
from typing import List
def grid_plot(x_data: List[float], y_data: List[float]) -> None:
"""Создает график с сеткой."""
plt.plot(x_data, y_data)
plt.grid(True)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
grid_plot(x_data, y_data)
Заливка области под графиком: plt.fill_between()
Функция plt.fill_between() заливает область между графиком и осью X.
import matplotlib.pyplot as plt
from typing import List
def fill_plot(x_data: List[float], y_data: List[float]) -> None:
"""Создает график с заливкой области под графиком."""
plt.plot(x_data, y_data)
plt.fill_between(x_data, y_data, alpha=0.2)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
fill_plot(x_data, y_data)
Нанесение текста на график: plt.text()
Функция plt.text() позволяет наносить текст на график.
import matplotlib.pyplot as plt
from typing import List
def text_plot(x_data: List[float], y_data: List[float], text: str, x_pos: float, y_pos: float) -> None:
"""Создает график с текстом."""
plt.plot(x_data, y_data)
plt.text(x_pos, y_pos, text)
plt.show()
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
text_plot(x_data, y_data, 'Важный график', 2, 8)
Работа с несколькими графиками и подграфиками
Создание нескольких подграфиков с помощью plt.subplot()
Функция plt.subplot() позволяет создавать несколько подграфиков в одной фигуре. Она принимает три аргумента: количество строк, количество столбцов и номер текущего подграфика.
import matplotlib.pyplot as plt
from typing import List
def subplot_example() -> None:
"""Создает несколько подграфиков в одной фигуре."""
plt.subplot(2, 1, 1)
plt.plot([1, 2, 3], [1, 4, 9])
plt.title('Первый подграфик')
plt.subplot(2, 1, 2)
plt.plot([1, 2, 3], [1, 2, 3])
plt.title('Второй подграфик')
plt.tight_layout()
plt.show()
subplot_example()
Использование plt.subplots() для создания фигуры и набора осей
Функция plt.subplots() является более удобным способом создания нескольких подграфиков. Она возвращает объект фигуры и массив осей.
import matplotlib.pyplot as plt
from typing import List
def subplots_example() -> None:
"""Создает фигуру и набор осей с помощью plt.subplots()."""
fig, axes = plt.subplots(2, 2)
axes[0, 0].plot([1, 2, 3], [1, 4, 9])
axes[0, 0].set_title('Подграфик 1')
axes[0, 1].plot([1, 2, 3], [1, 2, 3])
axes[0, 1].set_title('Подграфик 2')
axes[1, 0].plot([1, 2, 3], [3, 2, 1])
axes[1, 0].set_title('Подграфик 3')
axes[1, 1].plot([1, 2, 3], [2, 3, 1])
axes[1, 1].set_title('Подграфик 4')
plt.tight_layout()
plt.show()
subplots_example()
Совместное использование осей между подграфиками
При создании подграфиков можно указать аргумент sharex или sharey для совместного использования осей X или Y соответственно. Это удобно для сравнения данных в разных подграфиках.
import matplotlib.pyplot as plt
def shared_axes_example() -> None:
"""Создает подграфики с общими осями."""
fig, axes = plt.subplots(2, 1, sharex=True)
axes[0].plot([1, 2, 3], [1, 4, 9])
axes[0].set_title('Подграфик 1')
axes[1].plot([1, 2, 3], [1, 2, 3])
axes[1].set_title('Подграфик 2')
plt.tight_layout()
plt.show()
shared_axes_example()
Примеры использования plt.plot() в различных задачах
Построение графиков функций (синус, косинус и т.д.)
import matplotlib.pyplot as plt
import numpy as np
def plot_sine_cosine() -> None:
"""Строит графики синуса и косинуса."""
x = np.linspace(0, 2 * np.pi, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)
plt.plot(x, y_sin, label='sin(x)')
plt.plot(x, y_cos, label='cos(x)')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Графики синуса и косинуса')
plt.grid(True)
plt.show()
plot_sine_cosine()
Визуализация данных из массивов NumPy
import matplotlib.pyplot as plt
import numpy as np
def plot_numpy_data() -> None:
"""Визуализирует данные из массивов NumPy."""
data = np.random.rand(10, 2)
x = data[:, 0]
y = data[:, 1]
plt.plot(x, y, 'o')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Визуализация данных NumPy')
plt.show()
plot_numpy_data()
Создание графиков рассеяния (scatter plots) с помощью plt.plot()
Хотя для графиков рассеяния обычно используют plt.scatter(), plt.plot() также можно использовать, указав аргумент marker. Scatter plots полезны для визуализации связи между двумя переменными.
import matplotlib.pyplot as plt
import numpy as np
def plot_scatter() -> None:
"""Создает график рассеяния с помощью plt.plot()."""
x = np.random.rand(50)
y = np.random.rand(50)
plt.plot(x, y, 'o')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('График рассеяния')
plt.show()
plot_scatter()
Отображение временных рядов
Временные ряды – это последовательности данных, измеренные в последовательные моменты времени. plt.plot() отлично подходит для визуализации временных рядов, например, количества кликов по контекстной рекламе в течение дня.
import matplotlib.pyplot as plt
import numpy as np
import datetime
def plot_time_series() -> None:
"""Отображает временной ряд."""
# Генерация фиктивных данных временного ряда (например, клики по рекламе)
dates = [datetime.datetime(2024, 1, i) for i in range(1, 31)] # даты с 1 по 30 января
clicks = np.random.randint(10, 100, size=30) # случайное количество кликов в день
plt.plot(dates, clicks)
plt.xlabel('Дата')
plt.ylabel('Клики')
plt.title('Количество кликов по рекламе (январь 2024)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
plot_time_series()
Сохранение графиков
Сохранение графика в файл: plt.savefig()
Функция plt.savefig() позволяет сохранить график в файл. Это полезно для включения графиков в отчеты, презентации или веб-страницы.
import matplotlib.pyplot as plt
from typing import List
def save_plot(x_data: List[float], y_data: List[float], filename: str) -> None:
"""Сохраняет график в файл."""
plt.plot(x_data, y_data)
plt.savefig(filename)
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
save_plot(x_data, y_data, 'my_plot.png')
Выбор формата файла (PNG, JPG, PDF, SVG)
Функция plt.savefig() автоматически определяет формат файла на основе расширения в имени файла. Поддерживаются форматы PNG, JPG, PDF, SVG и другие.
Настройка разрешения и качества сохранения
Можно настроить разрешение и качество сохранения с помощью аргументов dpi и quality в plt.savefig(). dpi определяет количество точек на дюйм, а quality – качество изображения (для JPG).
import matplotlib.pyplot as plt
from typing import List
def save_plot_with_options(x_data: List[float], y_data: List[float], filename: str, dpi: int, quality: int = 95) -> None:
"""Сохраняет график с заданным разрешением и качеством."""
plt.plot(x_data, y_data)
plt.savefig(filename, dpi=dpi, quality=quality)
x_data = [1, 2, 3, 4]
y_data = [1, 4, 9, 16]
save_plot_with_options(x_data, y_data, 'my_plot_high_res.jpg', 300, 95)
Заключение
Краткое повторение основных моментов работы с plt.plot()
В этом руководстве мы рассмотрели основные и расширенные возможности функции plt.plot() в Matplotlib. Мы научились создавать простые и сложные графики, настраивать их внешний вид, добавлять заголовки, метки осей и легенду, а также сохранять графики в файлы. plt.plot() — мощный и гибкий инструмент для визуализации данных.