2017-03-10 6 views
3

multiplot aplpy ​​플롯을 동적으로 축을 공유하도록 만들 수있는 방법이있어서 이동 또는 확대/축소 할 때 다른 축을 이동하고 확대/축소 할 수 있습니까?Aplpy multiplot 동적 축 공유

matplotlib pyplot의 imshow 및 subplot 루틴을 사용하여 영향을 줄 수는 있지만, 내 플롯팅의 다른 중요한 측면은 제한되어 있지만, 이미지에는 필요한 모든 도구가 제공됩니다.

나는 matplotlib cid 명령과 함수를 사용하여 클릭 위치를 기반으로 모든 이미지를 다시 정렬하려고 시도했지만, 둘 다 확대하거나 축소 할 수는 없으며 아직 클릭 및 드래그 할 수 없습니다. 내 플로팅 코드의

내 MWE은 다음과 같습니다 :

from astropy.io import fits 
import matplotlib.pyplot as plt 
import aplpy 

root = '/my/data/directory/' 
data = '3d_image.fits' 

hdu = fits.open(root + data)[0] 
hdr = hdu.header 

fits1 = fits.PrimaryHDU(data = hdu.data[4,:,:], header = hdr) 
fits2 = fits.PrimaryHDU(data = hdu.data[6,:,:], header = hdr) 

fig = plt.figure(figsize=(15, 15)) 

f1 = aplpy.FITSFigure(fits1, figure=fig, subplot=[0.1,0.1,0.8,0.35]) 
f1.show_colorscale(cmap = 'coolwarm', vmin = 8., vmax = 10.5) 

f2 = aplpy.FITSFigure(fits2, figure=fig, subplot=[0.1,0.5,0.8,0.35]) 
f2.show_colorscale(cmap = 'coolwarm', vmin = 1.2, vmax = 1.6) 

fig.show 

답변

4

aplpy의 플로팅 기능이 완전하기 matplotlib를 기반으로 보인다. 그래서 aplpy로 수행 할 수있는 플롯 포맷팅은 한 가지 방법으로 수행 할 수도 있고 다른 포맷을 matplotlib로 수행 할 수도 있습니다.

그러나 여전히 플롯을 만들기 위해 aplpy를 계속 사용하려면 복잡한 이벤트 리스너가 필요하지 않은 솔루션이 있어야합니다.

불행히도 다른 라이브러리의 기능을 플로팅하는 것과는 달리, aplpy는 축이 아닌 인수로만 피쳐를 허용하는 것처럼 보입니다.

그럼에도 불구하고 그들의 작성 후 축을 연결할 수 있어야한다 :

axes = fig.get_axes() 
axes[0].get_shared_x_axes().join(axes[0], axes[1]) 
axes[0].get_shared_y_axes().join(axes[0], axes[1]) 
axes[0].autoscale() # <-- needed if no axes limits are explicitely set. 
+0

감사합니다, 내가 필요 정확히 이잖아. 나는 aplpy가 matplotlib를 사용하므로 거기에서 일을해야 할 수도 있지만 몇 가지 유용한 aplpy ​​속성이 도움이됩니다. 하나는 세계 좌표를 다루는 것이 훨씬 쉽다는 것입니다 (예를 들어, 헤더 파일에서 빼내어보아야 할 필요는 없습니다). 또 하나는 확대 할 때 자동 크기 조정되는 빔 크기 및 스케일 막대입니다. implow를 사용하고 10 또는 20을 묻는 것보다 aplpy를 사용하고이 질문에 대한 질문이 더 쉬운 것처럼 보입니다. –