Создание многоцветных линий в Matplotlib

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

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

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

Введение

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

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

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("Importing Matplotlib") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") python/BasicConceptsGroup -.-> python/booleans("Booleans") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills matplotlib/importing_matplotlib -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} matplotlib/figures_axes -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/booleans -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/lists -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/tuples -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/build_in_functions -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/importing_modules -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/numerical_computing -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} python/data_visualization -.-> lab-48836{{"Создание многоцветных линий в Matplotlib"}} end

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

Начнем с импорта необходимых библиотек для этого практического занятия. Импортируем 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.