Как установить соотношение сторон в Matplotlib


Соотношение сторон графика matplotlib относится к аспекту масштабирования оси, то есть отношению единицы y к единице x.

Это соотношение можно изменить с помощью функции matplotlib.axes.Axes.set_aspect() .

Под капотом функция set_aspect() фактически изменяет то, что известно как система координат данных, но на практике мы обычно хотим изменить систему координат отображения .

Чтобы упростить это преобразование, мы можем использовать этот фрагмент кода:

#define y-unit to x-unit ratio
ratio = 1.0

#get x and y limits
x_left, x_right = ax.get_xlim ()
y_low, y_high = ax.get_ylim ()

#set aspect ratio
ax.set_aspect ( abs ((x_right-x_left)/(y_low-y_high))\*ratio)

Давайте рассмотрим пример использования этой функции на практике.

Шаг 1: Создайте базовый график Matplotlib

Во-первых, давайте создадим простую линейную диаграмму с помощью Matplotlib:

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#display plot
plt.show()

Шаг 2: Установите соотношение сторон (неправильный способ)

Обратите внимание, что ось x длиннее оси y. Попробуем установить соотношение сторон равным 1, т.е. оси x и оси y должны быть равны:

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#attempt to set aspect ratio to 1
ax.set_aspect (1)

#display plot
plt.show() 

Обратите внимание, что это не сработало, как мы ожидали. Ось Y намного длиннее оси X.

Шаг 3: Установите соотношение сторон (правильно)

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

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#set aspect ratio to 1
ratio = 1.0
x_left, x_right = ax.get_xlim ()
y_low, y_high = ax.get_ylim ()
ax.set_aspect ( abs ((x_right-x_left)/(y_low-y_high))\*ratio)

#display plot
plt.show() 

Обратите внимание, что этот график имеет ожидаемое соотношение сторон. Ось X и ось Y имеют одинаковую длину.

Шаг 4: Настройте соотношение сторон на то, что вам нравится

Если мы хотим, чтобы ось Y была длиннее оси X, мы можем просто указать соотношение сторон, чтобы оно было числом больше 1:

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#set aspect ratio to 3
ratio = 3
x_left, x_right = ax.get_xlim ()
y_low, y_high = ax.get_ylim ()
ax.set_aspect ( abs ((x_right-x_left)/(y_low-y_high))\*ratio)

#display plot
plt.show() 

И если мы хотим, чтобы ось Y была короче, чем ось X, мы можем просто указать соотношение сторон, чтобы оно было числом меньше 1:

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#set aspect ratio to .3
ratio = .3
x_left, x_right = ax.get_xlim ()
y_low, y_high = ax.get_ylim ()
ax.set_aspect ( abs ((x_right-x_left)/(y_low-y_high))\*ratio)

#display plot
plt.show() 

Вы можете найти больше руководств по Matplotlib здесь .