Как использовать Matplotlib и построить график inline в Jupyter?

Что такое Matplotlib и его основные компоненты

Matplotlib — это мощная библиотека Python для создания статических, интерактивных и анимированных визуализаций данных. Она предоставляет широкий набор инструментов для построения различных типов графиков, начиная от простых линейных диаграмм и заканчивая сложными трехмерными моделями. Ключевыми компонентами Matplotlib являются:

  • pyplot: Модуль, предоставляющий интерфейс, похожий на MATLAB, для простого и быстрого создания графиков.
  • Artist: Базовый класс для всех объектов, отображаемых на графике (линии, точки, текст и т.д.).
  • Figure: Контейнер верхнего уровня, содержащий все элементы графика.
  • Axes: Объект, определяющий область рисования графика с осями и метками.

Что такое Jupyter Notebook и зачем он нужен для визуализации данных

Jupyter Notebook — это интерактивная среда разработки, позволяющая комбинировать код, текст (markdown), математические формулы и визуализации в одном документе. Он идеально подходит для исследования данных, прототипирования моделей и создания отчетов. Для визуализации данных в Jupyter Notebook используют Matplotlib, что позволяет сразу видеть результат выполнения кода и интерактивно настраивать графики.

Настройка окружения: установка Matplotlib и Jupyter

Для начала работы необходимо установить Matplotlib и Jupyter Notebook. Это можно сделать с помощью pip:

pip install matplotlib jupyter

Убедитесь, что у вас установлена последняя версия Python.

Отображение графиков inline в Jupyter Notebook

Магическая команда ‘%matplotlib inline’: что это и как она работает

Для отображения графиков непосредственно в Jupyter Notebook необходимо использовать магическую команду %matplotlib inline. Эта команда указывает Jupyter, что графики Matplotlib должны отображаться как статические изображения прямо под ячейкой с кодом.

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

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

plt.plot(x, y)
plt.show()

В этом примере %matplotlib inline гарантирует, что график синусоиды будет отображен непосредственно в блокноте.

Альтернативные магические команды для разных бэкендов (например, ‘%matplotlib notebook’)

Помимо %matplotlib inline, существуют и другие магические команды, определяющие бэкенд Matplotlib. Например, %matplotlib notebook позволяет создавать интерактивные графики, которые можно масштабировать и перемещать прямо в блокноте. Другой вариант – %matplotlib widget, требующий установки дополнительных расширений Jupyter для работы с интерактивными виджетами. Выбор бэкенда зависит от потребностей проекта и желаемого уровня интерактивности.

Настройка отображения графиков по умолчанию

Можно настроить параметры отображения графиков по умолчанию, чтобы не указывать их каждый раз при создании нового графика. Это делается через matplotlib.rcParams. Например:

import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.rcParams['figure.figsize'] = (8, 6)  # Размер графика по умолчанию
mpl.rcParams['axes.titlesize'] = 16      # Размер заголовка
mpl.rcParams['axes.labelsize'] = 14      # Размер меток осей

Создание базовых графиков с использованием Matplotlib

Построение линейных графиков (plot)

Функция plot() используется для создания линейных графиков. Ей передаются координаты x и y точек, которые соединяются линиями.

import matplotlib.pyplot as plt
import numpy as np

def generate_linear_plot(x_data: np.ndarray, y_data: np.ndarray, title: str, x_label: str, y_label: str) -> None:
    """Generates and displays a linear plot.

    Args:
        x_data: Array of x-coordinates.
        y_data: Array of y-coordinates.
        title: Title of the plot.
        x_label: Label for the x-axis.
        y_label: Label for the y-axis.
    """
    plt.plot(x_data, y_data)
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()

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

generate_linear_plot(x, y, "Синусоида", "X", "Y")
Реклама

Создание точечных диаграмм (scatter)

Точечные диаграммы используются для отображения взаимосвязи между двумя наборами данных. Каждая точка на диаграмме представляет собой пару значений x и y.

import matplotlib.pyplot as plt
import numpy as np

def generate_scatter_plot(x_data: np.ndarray, y_data: np.ndarray, title: str, x_label: str, y_label: str) -> None:
    """Generates and displays a scatter plot.

    Args:
        x_data: Array of x-coordinates.
        y_data: Array of y-coordinates.
        title: Title of the plot.
        x_label: Label for the x-axis.
        y_label: Label for the y-axis.
    """
    plt.scatter(x_data, y_data)
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()


x = np.random.rand(50)
y = np.random.rand(50)

generate_scatter_plot(x, y, "Точечная диаграмма", "X", "Y")

Построение столбчатых диаграмм (bar) и гистограмм (hist)

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

import matplotlib.pyplot as plt
import numpy as np

def generate_bar_chart(categories: list[str], values: list[float], title: str, x_label: str, y_label: str) -> None:
    """Generates and displays a bar chart.

    Args:
        categories: List of categories.
        values: List of values corresponding to categories.
        title: Title of the plot.
        x_label: Label for the x-axis.
        y_label: Label for the y-axis.
    """
    plt.bar(categories, values)
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()

def generate_histogram(data: np.ndarray, title: str, x_label: str, y_label: str) -> None:
    """Generates and displays a histogram.

    Args:
        data: Array of data values.
        title: Title of the plot.
        x_label: Label for the x-axis.
        y_label: Label for the y-axis.
    """
    plt.hist(data, bins=10)
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()


categories = ['A', 'B', 'C', 'D']
values = [25, 40, 30, 55]

generate_bar_chart(categories, values, "Столбчатая диаграмма", "Категории", "Значения")

data = np.random.randn(1000)
generate_histogram(data, "Гистограмма", "Значения", "Частота")

Примеры кода и пояснения

Приведенные выше примеры демонстрируют основные типы графиков, которые можно создавать с помощью Matplotlib. Важно помнить о необходимости добавления заголовков, меток осей и легенды для улучшения читаемости графиков.

Настройка внешнего вида графиков

Добавление заголовков, меток осей и легенды

import matplotlib.pyplot as plt
import numpy as np

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

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.title('Синус и косинус')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

Изменение цветов, стилей линий и маркеров

plt.plot(x, y1, color='red', linestyle='--', marker='o', label='sin(x)')
  • color: Цвет линии.
  • linestyle: Стиль линии (например, -- — пунктир).
  • marker: Маркер для отображения точек (например, o — круг).

Настройка пределов осей и масштаба

plt.xlim(0, 10)  # Пределы по оси X
plt.ylim(-1.5, 1.5) # Пределы по оси Y
plt.yscale('linear') # Масштаб оси Y (linear, log, symlog)

Работа с сеткой

plt.grid(True)  # Включить сетку
plt.grid(color='gray', linestyle='--', linewidth=0.5)

Продвинутые техники и советы

Создание нескольких графиков в одной ячейке (subplots)

Функция plt.subplots() позволяет создать несколько графиков в одной области отображения.

import matplotlib.pyplot as plt
import numpy as np

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

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
ax1.plot(x, y1)
ax1.set_title('Синус')
ax2.plot(x, y2)
ax2.set_title('Косинус')
plt.show()

Сохранение графиков в файлы

plt.savefig('my_plot.png') # Сохранение в PNG
plt.savefig('my_plot.pdf', format='pdf') # Сохранение в PDF

Решение проблем с отображением графиков

  • Убедитесь, что установлены все необходимые зависимости.
  • Проверьте правильность использования магических команд.
  • Перезапустите ядро Jupyter Notebook.

Рекомендации по стилю и оформлению графиков

  • Используйте понятные заголовки и метки осей.
  • Выбирайте цвета, которые хорошо контрастируют.
  • Не перегружайте график излишними деталями.
  • Стремитесь к ясности и информативности.

Добавить комментарий