[python] 두 개의 서브 플롯이 생성 된 후 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())을 확인할 때 연결 방법을 모르겠습니다.



답변

축을 공유하는 일반적인 방법은 생성시 공유 속성을 만드는 것입니다. 어느 한 쪽

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

또는

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

따라서 축을 만든 후 공유 할 필요가 없습니다.

그러나 어떤 이유로 든 축을 생성 한 후 공유 해야하는 경우 (실제로 here 과 같은 일부 서브 플롯을 생성하는 다른 라이브러리를 사용 하거나 삽입 된 축을 공유하는 것이 이유 일 수 있음) 여전히 해결책이 있습니다.

사용

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

두 축 사이에 링크를 생성 ax1하고 ax2. 생성시 공유와 달리 축 중 하나에 대해 xticklabels를 수동으로 설정해야합니다 (원하는 경우).

완전한 예 :

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([])
# ax2.autoscale() ## call autoscale if needed

plt.show()


답변