Как изменить оси matplotlib
Перейти к содержимому

Как изменить оси matplotlib

Как изменить оси в Matplotlib (с примерами)

Как изменить оси в Matplotlib (с примерами)

Вы можете использовать следующий базовый синтаксис, чтобы поменять местами ось X и ось Y в Matplotlib:

plt.gca().invert_xaxis () plt.gca().invert_yaxis () 

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: обратные оси в Matplotlib

Следующий код показывает, как создать базовую диаграмму рассеяния в Matplotlib:

import matplotlib.pyplot as plt #define x and y x = [1, 4, 8, 11, 13, 14] y = [5, 11, 18, 26, 25, 23] #create scatterplot of x and y plt.scatter (x, y) 

Мы можем использовать следующий код, чтобы перевернуть ось Y :

import matplotlib.pyplot as plt #define x and y x = [1, 4, 8, 11, 13, 14] y = [5, 11, 18, 26, 25, 23] #create scatterplot of x and y plt.scatter (x, y) #reverse y-axis plt.gca().invert_yaxis () 

Обратите внимание, что ось Y теперь находится в диапазоне от 25 до 5 вместо 5 до 25.

В качестве альтернативы мы могли бы использовать следующий код для реверсирования оси X :

import matplotlib.pyplot as plt #define x and y x = [1, 4, 8, 11, 13, 14] y = [5, 11, 18, 26, 25, 23] #create scatterplot of x and y plt.scatter (x, y) #reverse x-axis plt.gca().invert_xaxis () 

Обратите внимание, что ось x теперь находится в диапазоне от 14 до 0, а не от 0 до 14.

Наконец, мы могли бы использовать следующий код для реверсирования обеих осей :

import matplotlib.pyplot as plt #define x and y x = [1, 4, 8, 11, 13, 14] y = [5, 11, 18, 26, 25, 23] #create scatterplot of x and y plt.scatter (x, y) #reverse both axes plt.gca().invert_xaxis () plt.gca().invert_yaxis () 

Обратите внимание, что значения обеих осей меняются местами.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в Matplotlib:

Использование библиотеки Matplotlib. Как изменять интервал осей

По умолчанию библиотека Matplotlib подбирает масштаб графика так, чтобы в окне уместились все точки, однако с помощью функций xlim() и ylim() можно задавать интервал по осям X и Y соответственно, который мы хотим отобразить более подробно.

Следующий пример создает список точек, расположенных на интервале от -50 до 50 по оси X, однако мы ограничиваем просматриваемую область интервалом от -10 до 30.

import matplotlib. pyplot as plt
import numpy as np

if __name__ == ‘__main__’ :
# Интервал изменения переменной по оси X
xmin = — 50.0
xmax = 50.0

# Количество точек на графике
xcount = 301

# Создадим список координат по оси X на отрезке [-xmin; xmax], включая концы
x = np. linspace ( xmin , xmax , xcount )

# Вычислим значение функции в заданных точках
y = np. sinc ( x / np. pi )

# Нарисуем одномерный график с использованием стиля
plt. plot ( x , y )

# На графике будет показан только участок от -10 до 30 по оси X
plt. xlim ( — 10 , 30 )

# Покажем окно с нарисованным графиком
plt. show ( )

Результат получается следующий:

Следующий пример использует также функцию ylim(), чтобы расширить область по вертикали от -1 до 2:

import matplotlib. pyplot as plt
import numpy as np

if __name__ == ‘__main__’ :
# Интервал изменения переменной по оси X
xmin = — 50.0
xmax = 50.0

# Количество точек на графике
xcount = 301

# Создадим список координат по оси X на отрезке [-xmin; xmax], включая концы
x = np. linspace ( xmin , xmax , xcount )

# Вычислим значение функции в заданных точках
y = np. sinc ( x / np. pi )

# Нарисуем одномерный график с использованием стиля
plt. plot ( x , y )

# На графике будет показан только участок от -10 до 30 по оси X
plt. xlim ( — 10 , 30 )

# На графике будет показан участок от -1 до 2 по оси Y
plt. ylim ( — 1 , 2 )

# Покажем окно с нарисованным графиком
plt. show ( )

В результате мы увидим следующую картину:

Если мы хотим изменить только верхний или нижний предел на осях, то можно воспользоваться именованными параметрами xmin или xmax для функции xlim() и ymin или ymax для функции ylim().

Следующий пример изменяет только нижний предел по оси X и верхний по оси Y:

import matplotlib. pyplot as plt
import numpy as np

if __name__ == ‘__main__’ :
# Интервал изменения переменной по оси X
xmin = — 50.0
xmax = 50.0

# Количество точек на графике
xcount = 301

# Создадим список координат по оси X на отрезке [-xmin; xmax], включая концы
x = np. linspace ( xmin , xmax , xcount )

# Вычислим значение функции в заданных точках
y = np. sinc ( x / np. pi )

# Нарисуем одномерный график с использованием стиля
plt. plot ( x , y )

# На графике будет показан только участок от -10 до 30 по оси X
plt. xlim ( xmin = — 10 )

# На графике будет показан участок от -1 до 2 по оси Y
plt. ylim ( ymax = 2 )

# Покажем окно с нарисованным графиком
plt. show ( )

Результат выглядит следующим образом:

Как установить диапазон оси (xlim, ylim) в Matplotlib

Matplotlib — одна из наиболее широко используемых библиотек визуализации данных в Python. Большая часть популярности Matplotlib связана с его параметрами настройки — вы можете настроить практически любой элемент из его иерархии объектов.

В этом руководстве мы рассмотрим, как установить диапазон оси (xlim, ylim) в Matplotlib, чтобы обрезать или расширить представление до определенных пределов.

Создание сюжета

Сначала создадим простой сюжет:

import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots(figsize=(12, 6)) x = np.arange(0, 10, 0.1) y = np.sin(x) z = np.cos(x) ax.plot(y, color='blue', label='Sine wave') ax.plot(z, color='black', label='Cosine wave') plt.show() 

Здесь мы построили две синусоидальные функции, начиная с 0 и заканчивая 100 с шагом 0.1 . Запуск этого кода дает:

Теперь мы можем настроить диапазон этой оси, которая в настоящее время идет от 0 до 100 .

Установка диапазона оси в Matplotlib

Теперь, если мы хотим усечь это представление на меньшее или даже большее, мы можем настроить пределы X и Y. Доступ к ним можно получить либо через экземпляр PyPlot, либо через экземпляр Axes .

Как установить X-Limit (xlim) в Matplotlib

Давайте сначала установим X-limit, используя как PyPlot, так и экземпляры Axes . Оба эти метода принимают кортеж — левый и правый пределы. Так, например, если мы хотим обрезать представление, чтобы отображать только данные в диапазоне 25-50 по оси X, мы бы использовали xlim([25, 50]) :

fig, ax = plt.subplots(figsize=(12, 6)) x = np.arange(0, 10, 0.1) y = np.sin(x) z = np.cos(x) ax.plot(y, color='blue', label='Sine wave') ax.plot(z, color='black', label='Cosine wave') plt.xlim([25, 50]) 

Это ограничивает просмотр по оси X данными между 25 и 50 и приводит к:

Такого же эффекта можно добиться, задав их через объект ax . Таким образом, если у нас несколько Axes , мы можем установить лимит для них отдельно:

import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(12, 6)) x = np.arange(0, 10, 0.1) y = np.sin(x) z = np.cos(x) ax = fig.add_subplot(121) ax2 = fig.add_subplot(122) ax.set_title('Full view') ax.plot(y, color='blue', label='Sine wave') ax.plot(z, color='black', label='Cosine wave') ax2.set_title('Truncated view') ax2.plot(y, color='blue', label='Sine wave') ax2.plot(z, color='black', label='Cosine wave') ax2.set_xlim([25, 50]) plt.show() 

Как установить Y-Limit (ylim) в Matplotlib

Теперь давайте установим Y-Limit. Этого можно добиться с помощью тех же двух подходов:

ax.plot(y, color='blue', label='Sine wave') ax.plot(z, color='black', label='Cosine wave') plt.ylim([-1, 0]) 
ax.plot(y, color='blue', label='Sine wave') ax.plot(z, color='black', label='Cosine wave') ax.set_ylim([-1, 0]) 

Оба результата приводят к:

Вывод

В этом руководстве мы рассмотрели, как установить диапазон оси (т.е. пределы X и Y) с помощью Matplotlib в Python.

Настраиваем формат отображения меток у координатных осей

Помимо управления расположения меток на координатных осях можно также задавать формат вывода информации. Для этого используются различные форматеры. Но, прежде чем мы перейдем к их рассмотрению, отмечу две довольно распространенные на практике функции:

с помощью которых часто делают сокрытие текстовых меток для тиков графика:

import numpy as np import matplotlib.pyplot as plt fig = plt.figure(figsize=(7, 4)) ax = fig.add_subplot() x = np.arange(-np.pi/2, np.pi, 0.1) ax.plot(x, np.sin(x)) ax.set_xticklabels([]) ax.set_yticklabels([]) ax.grid() plt.show()

Если же требуется более тонкая настройка формата тиков, то для этого в matplotlib используется функция set_major_formatter(), которая применяет тот или иной форматер для форматирования текстовой информации у соответствующих координатных осей.

Само форматирование осуществляется с помощью различных классов, расположенных в ветке:

И на этом занятии мы рассмотрим основные из них.

NullFormatter

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

from matplotlib.ticker import NullFormatter

А, затем, применить к оси абсцисс или ординат:

ax.xaxis.set_major_formatter(NullFormatter())

Мы здесь сначала обращаемся к объекту xaxis, отвечающий за ось Ox, и вызываем функцию set_major_formatter(), передавая ей экземпляр класса NullFormatter. В результате, подписи у этой оси исчезают и мы видим следующий результат:

По аналогии, можно работать и с осью ординат, только для этого следует использовать объект yaxis:

ax.yaxis.set_major_formatter(NullFormatter())

Увидим похожий результат, но уже для оси Oy.

FormatStrFormatter

Следующий класс FormatStrFormatter позволяет устанавливать формат числовых данных подписей рисок. Для этого в конструктор данного класса передается спецификатор числа нужного формата, например, запись вида:

ax.yaxis.set_major_formatter(FormatStrFormatter('%d'))

будет округлять все числа до целых и по оси Oy мы увидим следующее:

Если же указать спецификатор в виде:

ax.yaxis.set_major_formatter(FormatStrFormatter('%f'))

то получим вещественные числа с шестью знаками после запятой. Для управления точностью вещественных чисел используется запись вида:

ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))

В данном случае мы ограничиваемся двумя цифрами после запятой, то есть, округляем все до сотых. Результат будет следующим:

Интересно, что здесь можно формировать любую строку заданного формата, например, добавлять надписи:

ax.yaxis.set_major_formatter(FormatStrFormatter('y = %.2f'))

В итоге, перед каждым числом будет записано «y = ».

FuncFormatter

Если у нас имеется некий алгоритм формирования надписей для рисок, то здесь хорошо подойдет класс FuncFormatter, формирующий значения на основе заданной функции. Например, зададим функцию, которая отрицательные значения будет заключать в квадратные скобки, а положительные – в круглые:

Для этого воспользуемся классом FuncFormatter и передадим ему ссылку на функцию formatOy:

ax.yaxis.set_major_formatter(FuncFormatter(formatOy))

Сама же функция будет выглядеть так:

def formatOy(x, pos): return f"[]" if x  0 else f"()"

Здесь x – это текущее значение риски; pos – текущая позиция (номер) риски от 0 до N, где N+1 – общее число рисок.

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

ScalarFormatter

Этот форматер используется пакетом matplotlib по умолчанию. Он отображает числовые данные так, как они есть с небольшими манипуляциями. Если число оказывается очень большим (больше 10^10), то его множитель выносится:

То же самое происходит и с очень маленькими числами (меньше 10^-10). Но мы можем изменить это поведение и настроить свой диапазон больших и малых значений. Например, если вывести график в диапазоне степени 10^5:

fig = plt.figure(figsize=(7, 4)) ax = fig.add_subplot() x = np.arange(-2*np.pi, 2*np.pi, 0.1) ax.plot(x, np.sinc(x) * 1e5) ax.grid() plt.show()

То числа будут отображены целиком без сокращений. Но, если сформировать ScalarFormatter и указать максимальную и минимальную степень 4:

sf = ScalarFormatter() sf.set_powerlimits((-4, 4)) ax.yaxis.set_major_formatter(sf)

то результат будет следующий:

Как видите, степень 10^5 была вынесена за скобки.

Если мы хотим настроить такое поведение глобально для всех графиков, то можно воспользоваться словарем rcParams и переопределить ключ axes.formatter.limits:

matplotlib.rcParams["axes.formatter.limits"] = (-4, 4)

FixedFormatter

Если каждой риске оси нужно присвоить строго определенное значение, то для этого хорошо подходит класс FixedFormatter. Работает он очень просто. Его конструктору передается список значений, которые, затем, будут подставлены соответствующим рискам. Например:

ax.xaxis.set_major_locator(FixedLocator([-3, -2, -1, 0, 1, 2, 3])) ax.xaxis.set_major_formatter(FixedFormatter(['a', 'b', 'c', 'd', 'e', 'f', 'g']))

Причем, обратите внимание, мы использовали класс FixedFormatter совместно с классом FixedLocator, так как желательно, чтобы списки по длинам в этих классах совпадали.

Мы с вами рассмотрели лишь некоторые популярные классы форматеров, полный их список можно найти на странице официальной документации:

Видео по теме

#1. Установка пакета и основные возможности

#2. Функция plot для построения и оформления двумерных графиков

#3. Отображение нескольких координатных осей в одном окне

#4. Граничные значения осей и локаторы для расположения меток на них

#5. Настраиваем формат отображения меток у координатных осей

#6. Делаем логарифмический масштаб у координатных осей

#7. Размещаем стандартные текстовые элементы на графике

#8. Добавляем легенду и рисуем геометрические фигуры на графиках

#9. Рисуем ступенчатые, стековые, stem и точечные графики

#10. Рисуем гистограммы, столбчатые и круговые диаграммы

#11. Показ изображений и цветовых сеток

#12. Как строить трехмерные графики

#13. Рисуем линии уровня функциями contour, contourf и tricontour, tricontourf

#14. Создаем анимацию графиков Классы FuncAnimation и ArtistAnimation

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *