Как распределить ось x двух подзаговоров после их создания?

Я пытаюсь использовать две оси подзаголовков, но мне нужно разделить ось x после создания фигуры. Так, например, я создаю эту цифру:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
plt.plot(t,x)
ax2 = plt.subplot(212)
plt.plot(t,y)

# some code to share both x axis

plt.show()

Вместо комментария я бы вставлял некоторый код для совместного использования оси x. Я не нашел подсказки, как я могу это сделать. Есть некоторые атрибуты _shared_x_axes и _shared_x_axes, когда я проверяю ось фигуры (fig.get_axes()), но я не знаю, как их связать.

Ответ 1

Обычный способ совместного использования осей состоит в создании общих свойств при создании. Либо

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212, sharex = ax1)

или

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)

Поэтому совместное использование осей после их создания не должно быть необходимым.

Однако если по какой-то странной причине вам нужно обменивать оси после их создания (фактически, используя другую библиотеку, которая создает некоторые подзаголовки, например здесь, может быть причиной), все равно будет решение:

Используя

ax1.get_shared_x_axes().join(ax1, ax2)

создает связь между двумя осями, ax1 и ax2. В отличие от совместного использования во время создания, вам нужно будет вручную установить шестнадцатеричные метки для одной из осей (в случае, если это требуется).

Полный пример:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)

ax1.plot(t,x)
ax2.plot(t,y)

ax1.get_shared_x_axes().join(ax1, ax2)
ax1.set_xticklabels([])

plt.show()