Эффективная визуализация линий с использованием Matplotlib

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

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

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

Введение

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

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

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

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

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

Импортируем библиотеки

Прежде чем начать, нам нужно импортировать необходимые библиотеки. Мы будем использовать matplotlib.pyplot и numpy.

import matplotlib.pyplot as plt
import numpy as np

Создаем данные

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

x = np.arange(100)
ys = x[:50, np.newaxis] + x[np.newaxis, :]

Создаем коллекцию линий

Теперь мы можем создать объект LineCollection с помощью функции LineCollection. Мы можем задать параметры linewidths, colors и linestyle, чтобы настроить внешний вид линий.

colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

segs = np.zeros((50, 100, 2))
segs[:, :, 1] = ys
segs[:, :, 0] = x

segs = np.ma.masked_where((segs > 50) & (segs < 60), segs)

line_segments = LineCollection(segs, linewidths=(0.5, 1, 1.5, 2),
                               colors=colors, linestyle='solid')

Создаем график

Теперь мы можем создать график с использованием matplotlib и добавить объект LineCollection на график с помощью метода add_collection объекта Axes.

fig, ax = plt.subplots()
ax.set_xlim(x.min(), x.max())
ax.set_ylim(ys.min(), ys.max())

ax.add_collection(line_segments)
ax.set_title('Line collection with masked arrays')
plt.show()

Отображаем цвета значениями

Мы также можем отобразить массив значений на цвета с использованием функции ScalarMappable.set_array. Мы создадим новый набор данных и новый объект LineCollection с параметром array, установленным на значения x. Затем мы можем использовать метод colorbar объекта Figure, чтобы добавить цветовую шкалу на график.

N = 50
x = np.arange(N)
ys = [x + i for i in x]
segs = [np.column_stack([x, y]) for y in ys]

fig, ax = plt.subplots()
ax.set_xlim(np.min(x), np.max(x))
ax.set_ylim(np.min(ys), np.max(ys))

line_segments = LineCollection(segs, array=x,
                               linewidths=(0.5, 1, 1.5, 2),
                               linestyles='solid')
ax.add_collection(line_segments)
axcb = fig.colorbar(line_segments)
axcb.set_label('Line Number')
ax.set_title('Line Collection with mapped colors')
plt.sci(line_segments)
plt.show()

Резюме

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