Техники преобразования осей в Matplotlib

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

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

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

Введение

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

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

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

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

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

Импортируем библиотеки и генерируем данные

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

import matplotlib.pyplot as plt
import numpy as np

## Fixing random state for reproducibility
np.random.seed(19680801)

## make up some data in the interval ]0, 1[
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

Создаем график с линейной шкалой

Первым типом масштабного преобразования, которое мы исследуем, является линейный. Это стандартная шкала, используемая в Matplotlib. Чтобы создать график с линейной шкалой, мы используем метод set_yscale() и передаем в него строку 'linear'. Также добавляем заголовок и сетку к графику.

## linear
plt.plot(x, y)
plt.yscale('linear')
plt.title('Linear Scale')
plt.grid(True)

Создаем график с логарифмической шкалой

Следующим типом масштабного преобразования, которое мы исследуем, является логарифмический. Чтобы создать график с логарифмической шкалой, мы используем метод set_yscale() и передаем в него строку 'log'. Также добавляем заголовок и сетку к графику.

## log
plt.plot(x, y)
plt.yscale('log')
plt.title('Logarithmic Scale')
plt.grid(True)

Создаем график с симметричной логарифмической шкалой

Третий тип масштабного преобразования, которое мы исследуем, - это симметричная логарифмическая. Этот тип шкалы полезен при работе с данными, содержащими как положительные, так и отрицательные значения. Чтобы создать график с симметричной логарифмической шкалой, мы используем метод set_yscale() и передаем в него строку 'symlog'. Также задаем параметр linthresh равным 0.02, чтобы указать диапазон значений вокруг нуля, которые будут линейно масштабированы. Также добавляем заголовок и сетку к графику.

## symmetric log
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthresh=0.02)
plt.title('Symmetrical Logarithmic Scale')
plt.grid(True)

Создаем график с логит - шкалой

Четвертым типом масштабного преобразования, которое мы исследуем, является логит. Этот тип шкалы полезен при работе с данными, ограниченными значениями от 0 до 1. Чтобы создать график с логит - шкалой, мы используем метод set_yscale() и передаем в него строку 'logit'. Также добавляем заголовок и сетку к графику.

## logit
plt.plot(x, y)
plt.yscale('logit')
plt.title('Logit Scale')
plt.grid(True)

Создаем график с пользовательской шкалой

Последним типом масштабного преобразования, которое мы исследуем, является пользовательский. Это позволяет нам определить собственные функции прямого и обратного преобразования для масштабного преобразования. В этом примере мы определим пользовательскую функцию для извлечения квадратного корня из данных. Чтобы создать график с пользовательской шкалой, мы используем метод set_yscale() и передаем в него строку 'function'. Также определяем функции forward() и inverse() и передаем их в качестве аргументов в параметр functions. Также добавляем заголовок и сетку к графику.

## Функция x**(1/2)
def forward(x):
    return x**(1/2)

def inverse(x):
    return x**2

plt.plot(x, y)
plt.yscale('function', functions=(forward, inverse))
plt.title('Custom Scale')
plt.grid(True)

Создаем график с масштабом преобразования Меркатора

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

## Функция преобразования Меркатора
def forward(a):
    a = np.deg2rad(a)
    return np.rad2deg(np.log(np.abs(np.tan(a) + 1.0 / np.cos(a))))

def inverse(a):
    a = np.deg2rad(a)
    return np.rad2deg(np.arctan(np.sinh(a)))

t = np.arange(0, 170.0, 0.1)
s = t / 2.

plt.plot(t, s, '-', lw=2)
plt.yscale('function', functions=(forward, inverse))
plt.title('Mercator Transform Scale')
plt.grid(True)
plt.xlim([0, 180])

Резюме

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