Matplotlib / Pyplot : 서브 플롯을 함께 확대 / 축소하는 방법은 무엇입니까?


82

함께 확대하고 싶은 별도의 서브 플롯에 3 축 가속도계 시계열 데이터 (t, x, y, z) 플롯이 있습니다. 즉, 하나의 플롯에서 "직사각형으로 확대"도구를 사용할 때 마우스를 놓으면 3 개의 플롯이 모두 함께 확대됩니다.

이전에는 다른 색상을 사용하여 단일 플롯에 3 개의 축을 모두 플로팅했습니다. 그러나 이것은 적은 양의 데이터에만 유용합니다. 2 백만 개가 넘는 데이터 포인트가 있으므로 플로팅 된 마지막 축이 나머지 2 개를가립니다. 따라서 별도의 서브 플롯이 필요합니다.

matplotlib / pyplot 마우스 이벤트 (http://matplotlib.sourceforge.net/users/event_handling.html)를 캡처 할 수 있고 다른 이벤트 (http://matplotlib.sourceforge.net/api/backend_bases_api)를 캡처 할 수 있다는 것을 알고 있습니다. .html # matplotlib.backend_bases.ResizeEvent),하지만 한 서브 플롯에서 어떤 확대 / 축소가 요청되었는지, 그리고 다른 두 서브 플롯에서 복제하는 방법을 알 수 없습니다.

나는 모든 조각을 가지고 있다고 생각하며 마지막 귀중한 단서 만 필요합니다 ...

-BobC


IMO 최고의 문서는 그들이 제공하는 예제 코드는 다음과 같습니다 matplotlib.org/examples/pylab_examples/shared_axis_demo.html
트레버 보이드 스미스

1
진실! 내 질문을 할 때 그 페이지가 존재했으면 좋겠다. 이제 거기에 너무 좋아.
BobC

답변:


121

이를 수행하는 가장 쉬운 방법 은 축을 만들 때 sharex및 / 또는 sharey키워드 를 사용하는 것입니다 .

from matplotlib import pyplot as plt

ax1 = plt.subplot(2,1,1)
ax1.plot(...)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(...)

34

당신 plt.subplots의 스타일이라면으로 도 할 수 있습니다 .

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True)

-1

대화식으로 이것은 별도의 축에서 작동합니다.

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.