В matplotlib, каков наилучший способ синхронизировать границы осей для сюжетов (аналогично matlab `linkaxes ()`)? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть фигура из двух столбцов, где столбцы с левой и правой стороны имеют разные масштабы, поэтому я не могу использовать глобальный оператор fig, ax = plt.subplots(nrows=5, ncols=2, sharex=True, sharey=True).Моя цель состоит в том, чтобы синхронизировать пределы x и y для каждого столбца вспомогательных участков, чтобы при увеличении и уменьшении масштаба в jupyter с widget backend каждый столбец синхронизировался самостоятельно.

Вот некоторые идеи, основанные на решении, которые я нашел о переполнении стека:

import numpy as np
import matplotlib.pyplot as plt

# Make fake data
# fake data for left-hand-side subplots column
x1 = np.linspace(0, 4 * np.pi, 50)
y1 = np.tile(np.sin(x1), (5, 1))

# fake data for left-hand-side subplots column
x2 = 2 * x1
y2 = 2 * abs(y1)

# Plotting
fig, ax = plt.subplots(nrows=5, ncols=2)
fig.subplots_adjust(wspace=0.5, hspace=0.1)
ax_ref1, ax_ref2 = (ax[0, 0], ax[0, 1])
for axi, y1_i in zip(ax[:, 0].flatten(), y1):
    axi.plot(x1, y1_i)
    # Link xlim and ylim of left-hand-side subplots
    ax_ref1.get_shared_x_axes().join(ax_ref1, axi)
    ax_ref1.get_shared_y_axes().join(ax_ref1, axi)
ax_ref1.set(title='Left-hand-side column')

for axi, y2_i in zip(ax[:, 1].flatten(), y2):
    axi.plot(x2, y2_i)
    # Link xlim and ylim of Right-hand-side subplots
    ax_ref2.get_shared_x_axes().join(ax_ref2, axi)
    ax_ref2.get_shared_y_axes().join(ax_ref2, axi)
ax_ref2.set(title='Right-hand-side column')
plt.show()

Это создаст изображение из двух столбцов, которое позволяет желаемую синхронизацию по осям x и y.Но мне интересно, есть ли более лаконичный способ сделать это - что-то похожее на linkaxes() функцию matlab .Спасибо!

enter image description here

1 Ответ

0 голосов
/ 09 октября 2018

Уроки, извлеченные для меня - читайте документы!
Как сказано в комментариях выше, решение должно быть простым:
fig, ax = plt.subplots(nrows=5, ncols=2, sharex='col', sharey='col')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...