programing

두 하위 플롯이 생성된 후 x축을 공유하는 방법

minimums 2023. 7. 17. 20:49
반응형

두 하위 플롯이 생성된 후 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 axes

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)

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

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

사용.

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

두 축 사이에 연결을 만듭니다.ax1그리고.ax2생성 시 공유와 달리 xtick 라벨은 필요한 경우 축 중 하나에 대해 수동으로 설정해야 합니다.

완전한 예:

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()

다른 답변에는 축 목록을 처리하기 위한 코드가 있습니다.

axes[0].get_shared_x_axes().join(axes[0], *axes[1:])

Matplotlib v3.3 기준으로 현재 존재합니다.Axes.sharex,Axes.sharey메서드:

ax1.sharex(ax2)
ax1.sharey(ax3)

위에서 말한 어네스트가 되는 것의 중요성에 추가하기 위해서입니다.

전체가 있는 경우listAxes 객체의 경우 다음과 같이 목록의 압축을 풀면 해당 객체를 한 번에 전달하고 해당 객체의 축을 공유할 수 있습니다.

ax_list = [ax1, ax2, ... axn] #< your axes objects 
ax_list[0].get_shared_x_axes().join(ax_list[0], *ax_list)

위의 내용은 모든 것을 연결합니다.물론, 당신은 창의적이고 서브셋을 할 수 있습니다.list그들 중 일부만 연결합니다.

참고:

모든 것을 가지려면axes함께 연결되면, 당신은 반드시 첫 번째 요소를 포함해야 합니다.axes_list통화에서, 당신이 호출한다는 사실에도 불구하고..get_shared_x_axes()첫 번째 요소부터!

이렇게 하면 논리적으로 보일 수 있습니다.

ax_list[0].get_shared_x_axes().join(ax_list[0], *ax_list[1:])

모든 것을 연결하는 결과를 초래할 것입니다.axes다른 개체와 완전히 독립적으로 유지되는 첫 번째 개체를 제외한 개체를 함께 사용합니다.

기능.join는 더 이상 사용되지 않으며 곧 제거될 예정입니다.이 기능은 계속 사용하지 않는 것이 좋습니다.

당신은 iacob이 제안한 방법을 사용할 수 있지만, Trevor Boyd Smith가 언급한 것처럼,sharex그리고.sharey동일한 개체에 대해 한 번만 호출할 수 있습니다.

따라서 해결책은 하나의 단일 축을 첫 번째 축과 연결해야 하는 여러 축의 호출 인수로 선택하는 것입니다. 예를 들어 축에 대해 동일한 y 척도를 설정하는 것입니다.ax1,ax2그리고.ax3:

  • 를 선택합니다.ax1다른 요청에 대한 주장으로.
  • ax2.sharey(ax1),ax3.sharey(ax1)필요한 경우 등.

언급URL : https://stackoverflow.com/questions/42973223/how-to-share-x-axes-of-two-subplots-after-they-have-been-created

반응형