Создание графиков с двумя осями y в Matplotlib

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

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

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

Введение

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

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

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

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

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

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

Сначала нам нужно импортировать необходимые библиотеки. Мы будем использовать Matplotlib и его модуль parasite_axes для создания графика.

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from mpl_toolkits.axes_grid1.parasite_axes import HostAxes

Определение данных

Далее нам нужно определить данные, которые будут отображаться на графике. В этом примере у нас есть набор наблюдений с четырьмя переменными: имя, угловая собственная скорость, ошибка угловой собственной скорости и расстояние. Мы преобразуем угловую собственную скорость в линейную скорость и построим ее в зависимости от FWHM (ширина в полувысоте) наблюдений.

obs = [["01_S1", 3.88, 0.14, 1970, 63],
       ["01_S4", 5.6, 0.82, 1622, 150],
       ["02_S1", 2.4, 0.54, 1570, 40],
       ["03_S1", 4.1, 0.62, 2380, 170]]

## Коэффициент преобразования от угловой собственной скорости к линейной скорости
pm_to_kms = 1./206265.*2300*3.085e18/3.15e7/1.e5

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

Теперь мы создадим график с использованием функций HostAxes и twin() из модуля parasite_axes. HostAxes используется для создания основного графика, а twin() - для создания вторичной оси y.

fig = plt.figure()

## Создаем объект HostAxes
ax_kms = fig.add_subplot(axes_class=HostAxes, aspect=1)

## Создаем вторичную ось y с преобразованными координатами
aux_trans = mtransforms.Affine2D().scale(pm_to_kms, 1.)
ax_pm = ax_kms.twin(aux_trans)

## Строим данные
for n, ds, dse, w, we in obs:
    time = ((2007 + (10. + 4/30.)/12) - 1988.5)
    v = ds / time * pm_to_kms
    ve = dse / time * pm_to_kms
    ax_kms.errorbar([v], [w], xerr=[ve], yerr=[we], color="k")

## Задаем метки осей
ax_kms.axis["bottom"].set_label("Linear velocity at 2.3 kpc [km/s]")
ax_kms.axis["left"].set_label("FWHM [km/s]")
ax_pm.axis["top"].set_label(r"Proper Motion [$''$/yr]")

## Скрываем метки делений на вторичной оси y
ax_pm.axis["right"].major_ticklabels.set_visible(False)

## Задаем пределы графика
ax_kms.set_xlim(950, 3700)
ax_kms.set_ylim(950, 3100)

Отображение графика

Наконец, мы отобразим график с использованием функции plt.show().

plt.show()

Резюме

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