Введение
В этом практическом занятии мы научимся создавать многоцветные линии в Matplotlib. Мы будем использовать функцию LineCollection для создания набора отрезков прямой и окрашивать их индивидуально в зависимости от их производной. Также мы узнаем, как использовать граничное нормалирование для окрашивания отрезков прямой.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и приступить к практике в Jupyter Notebook.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем библиотеки
Начнем с импорта необходимых библиотек для этого практического занятия. Импортируем matplotlib.pyplot и numpy.
import matplotlib.pyplot as plt
import numpy as np
Создаем данные
Создадим numpy-массив x, содержащий 500 равномерно распределенных значений между 0 и 3π. Также создадим другой numpy-массив y, содержащий синус значений из x. Наконец, создадим numpy-массив dydx, содержащий первую производную y.
x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))
Создаем отрезки прямой
Создадим набор отрезков прямой, чтобы мы могли окрашивать их индивидуально. Используем функцию concatenate из numpy для конкатенации двух массивов points[:-1] и points[1:] вдоль второй оси. Затем преобразуем результирующий массив в массив N x 1 x 2, чтобы можно было легко накапливать точки и получить отрезки. Массив отрезков для коллекции линий должен быть (количество линий) x (количество точек в линии) x 2 (для x и y).
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
Создаем непрерывную норму
Создадим непрерывную норму для отображения из точек данных в цвета. Используем функцию Normalize из matplotlib.pyplot для нормализации значений dydx между его минимальным и максимальным значениями. Затем используем функцию LineCollection для создания набора отрезков прямой и окрашиваем их индивидуально в зависимости от их производной. Используем функцию set_array для установки значений, используемых для отображения цветов.
norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
Создаем цветовую шкалу
Создадим цветовую шкалу для отображения соответствия между цветами и значениями dydx. Используем функцию colorbar из matplotlib.pyplot для создания цветовой шкалы.
line = plt.gca().add_collection(lc)
plt.colorbar(line)
Используем граничную норму
Вместо этого мы будем использовать граничную норму для окрашивания отрезков прямой. Создадим ListedColormap, содержащий три цвета - красный, зеленый и синий. Затем создадим BoundaryNorm с границами -1, -0,5, 0,5 и 1, а также ListedColormap. Используем функцию set_array для установки значений, используемых для отображения цветов.
cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
Создаем подграфик
Создадим подграфик для отображения окрашенных отрезков прямой. Используем функцию subplots из matplotlib.pyplot для создания сетки подграфиков 2x1 и параметры sharex и sharey, чтобы поделить оси x и y между подграфиками.
fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])
Задаем пределы осей
Мы зададим пределы осей x и y для подграфиков.
axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)
Показываем график
Мы будем использовать функцию show из matplotlib.pyplot для отображения графика.
plt.show()
Резюме
В этом практическом занятии мы узнали, как создавать многоцветные линии в Matplotlib. Мы использовали функцию LineCollection для создания набора отрезков прямой и окрашивали их отдельно в зависимости от их производной. Мы также узнали, как использовать граничную норму для окрашивания отрезков прямой. Мы использовали функцию Normalize для нормализации значений dydx между их минимальным и максимальным значениями, а также функцию ListedColormap для создания карты цветов с тремя цветами - красным, зеленым и синим. Мы использовали функцию BoundaryNorm для создания граничной нормы с границами -1, -0,5, 0,5 и 1, а также ListedColormap. Наконец, мы использовали функцию subplots для создания сетки подграфиков 2x1 и параметры sharex и sharey, чтобы поделить оси x и y между подграфиками. Затем мы показали график с использованием функции show.