Настройка порядка отрисовки в Matplotlib

Beginner

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

Введение

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

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

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

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

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

Понимание zorder

Атрибут zorder в Matplotlib - это вещественное число, которое определяет порядок отрисовки графиков. Графики с большим значением zorder нарисовываются поверх графиков с меньшим значением zorder. Значение по умолчанию zorder зависит от типа графика. Например, изображения имеют значение zorder по умолчанию 0, в то время как наклеек - значение по умолчанию 1.

Изменение zorder

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

import matplotlib.pyplot as plt
import numpy as np

r = np.linspace(0.3, 1, 30)
theta = np.linspace(0, 4*np.pi, 30)
x = r * np.sin(theta)
y = r * np.cos(theta)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 3.2))

ax1.plot(x, y, 'C3', lw=3)
ax1.scatter(x, y, s=120)
ax1.set_title('Lines on top of dots')

ax2.plot(x, y, 'C3', lw=3)
ax2.scatter(x, y, s=120, zorder=2.5)  ## move dots on top of line
ax2.set_title('Dots on top of lines')

plt.tight_layout()
plt.show()

Установка zorder для делений и сеточных линий

Мы можем использовать метод set_axisbelow() или параметр axes.axisbelow, чтобы установить zorder для делений и сеточных линий.

ax = plt.axes()
ax.plot([1, 2, 3], [2, 4, 3])
ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')

Пользовательский порядок элементов

Мы также можем установить zorder элементов в пользовательском порядке. Например, мы можем установить zorder легенды между двумя линиями.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 7.5, 100)
plt.rcParams['lines.linewidth'] = 5
plt.figure()
plt.plot(x, np.sin(x), label='zorder=2', zorder=2)  ## bottom
plt.plot(x, np.sin(x+0.5), label='zorder=3',  zorder=3)
plt.axhline(0, label='zorder=2.5', color='lightgrey', zorder=2.5)
plt.title('Custom order of elements')
l = plt.legend(loc='upper right')
l.set_zorder(2.5)  ## legend between blue and orange line
plt.show()

Резюме

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