Основы визуализации с Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Советы по работе с ВМ

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

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем библиотеки и настраиваем данные

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

import matplotlib.pyplot as plt
import numpy as np

## Set up data
np.random.seed(19680801)

X = np.linspace(0.5, 3.5, 100)
Y1 = 3+np.cos(X)
Y2 = 1+np.cos(1+X/0.75)/2
Y3 = np.random.uniform(Y1, Y2, len(X))

Создаем рисунок и настраиваем оси

Далее мы создадим рисунок и настроим оси. Мы будем использовать метод add_axes() для создания нового набора осей внутри рисунка. Также установим пределы для осей x и y и добавим сетку.

## Create figure and axes
fig = plt.figure(figsize=(7.5, 7.5))
ax = fig.add_axes([0.2, 0.17, 0.68, 0.7], aspect=1)

## Set limits and gridlines
ax.set_xlim(0, 4)
ax.set_ylim(0, 4)
ax.grid(linestyle="--", linewidth=0.5, color='.25', zorder=-10)

Построим график данных

Теперь мы построим наши данные на осях, которые мы только что создали. Мы будем использовать метод plot() для построения трех синусоидальных волн с разными цветами и ширинами линий.

## Plot data
ax.plot(X, Y1, c='C0', lw=2.5, label="Blue signal", zorder=10)
ax.plot(X, Y2, c='C1', lw=2.5, label="Orange signal")
ax.plot(X[::3], Y3[::3], linewidth=0, markersize=9,
        marker='s', markerfacecolor='none', markeredgecolor='C4',
        markeredgewidth=2.5)

Добавим метки и заголовок

Теперь мы добавим метки к осям x и y, а также заголовок к рисунку с использованием методов set_xlabel(), set_ylabel() и set_title().

## Add labels and title
ax.set_xlabel("x Axis label", fontsize=14)
ax.set_ylabel("y Axis label", fontsize=14)
ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom')

Добавим легенду

Мы добавим легенду к рисунку с использованием метода legend(). Также укажем расположение и размер шрифта легенды.

## Add legend
ax.legend(loc="upper right", fontsize=14)

Аннотируем рисунок

Наконец, мы.annotируем рисунок, чтобы показать имена различных элементов Matplotlib с использованием методов text() и Circle(). Мы также будем использовать метод withStroke() для добавления белой обводки к тексту и маркерам для лучшей видимости.

## Annotate the figure
from matplotlib.patches import Circle
from matplotlib.patheffects import withStroke

royal_blue = [0, 20/256, 82/256]

def annotate(x, y, text, code):
    ## Circle marker
    c = Circle((x, y), radius=0.15, clip_on=False, zorder=10, linewidth=2.5,
               edgecolor=royal_blue + [0.6], facecolor='none',
               path_effects=[withStroke(linewidth=7, foreground='white')])
    ax.add_artist(c)

    ## use path_effects as a background for the texts
    ## draw the path_effects and the colored text separately so that the
    ## path_effects cannot clip other texts
    for path_effects in [[withStroke(linewidth=7, foreground='white')], []]:
        color = 'white' if path_effects else royal_blue
        ax.text(x, y-0.2, text, zorder=100,
                ha='center', va='top', weight='bold', color=color,
                style='italic', fontfamily='Courier New',
                path_effects=path_effects)

        color = 'white' if path_effects else 'black'
        ax.text(x, y-0.33, code, zorder=100,
                ha='center', va='top', weight='normal', color=color,
                fontfamily='monospace', fontsize='medium',
                path_effects=path_effects)

annotate(3.5, -0.13, "Minor tick label", "ax.xaxis.set_minor_formatter")
annotate(-0.03, 1.0, "Major tick", "ax.yaxis.set_major_locator")
annotate(0.00, 3.75, "Minor tick", "ax.yaxis.set_minor_locator")
annotate(-0.15, 3.00, "Major tick label", "ax.yaxis.set_major_formatter")
annotate(1.68, -0.39, "xlabel", "ax.set_xlabel")
annotate(-0.38, 1.67, "ylabel", "ax.set_ylabel")
annotate(1.52, 4.15, "Title", "ax.set_title")
annotate(1.75, 2.80, "Line", "ax.plot")
annotate(2.25, 1.54, "Markers", "ax.scatter")
annotate(3.00, 3.00, "Grid", "ax.grid")
annotate(3.60, 3.58, "Legend", "ax.legend")
annotate(2.5, 0.55, "Axes", "fig.subplots")
annotate(4, 4.5, "Figure", "plt.figure")
annotate(0.65, 0.01, "x Axis", "ax.xaxis")
annotate(0, 0.36, "y Axis", "ax.yaxis")
annotate(4.0, 0.7, "Spine", "ax.spines")

Резюме

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