Введение
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. Мы изучили линейные, логарифмические, симметричные логарифмические, логит, пользовательские и масштабные преобразования Меркатора. Применяя эти масштабные преобразования, мы можем лучше визуализировать данные, содержащие очень большие или очень маленькие числа, а также данные, содержащие как положительные, так и отрицательные значения.