기본적으로 gridspec
과 APLpy를 결합하려고합니다.APLpy와 matplotlib와의 비 호환성 gridspec
하지만 어쨌든 서브 플로트의 행에서 첫 번째 음모는 항상 작동합니다. 즉, 음원의 크기가 예상 한 것과 다릅니다. 첫 번째 이미지는 다소 큰 프레임을 보여 주지만 다른 이미지는 정사각형입니다.
나는 기본적으로 재조정 또는 첫 번째 플롯의 크기를 조정하는 내가 생각할 수있는 모든 것을 시도했다 수동으로 전 APLpy로 충전 후 transforms
및 Bbox
를 사용하여 크기를 설정
- 는
- 는
get_position().bounds
을 요구하지 않음 하지만 단순히get_position()
이전과 부가 적 줄거리
set_aspect('equal')
를 사용하여 APLpy 명령
아무것도 작동하지 않습니다. 그것은 이미지와 관련이 없으며, 다른 이미지를 그렸거나 동일한 결과로 주문 결과를 변경합니다.
간단히 말해 첫 번째 서브 플로트의 크기를 변경하지 못하게 할 수 있습니다. gridspec
주변의 방법은 없습니다. 서브 플로트의이 시리즈는 더 큰 플롯의 일부이고 gridspec
이외의 다른 것을 사용하면 모든 것을 복잡하게 만들 것이기 때문입니다.
도움이된다면 크게 환영 할 것입니다.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib import gridspec
import aplpy
f=plt.figure()
gs=gridspec.GridSpec(1,4)
ax0=plt.subplot(gs[0,0]);ax1=plt.subplot(gs[0,1]);ax2=plt.subplot(gs[0,2]);ax3=plt.subplot(gs[0,3])
ax0.set_aspect('equal'); ax1.set_aspect('equal'); ax2.set_aspect('equal'); ax3.set_aspect('equal');
ax0.axes.get_xaxis().set_ticks([]); ax1.axes.get_xaxis().set_ticks([]); ax2.axes.get_xaxis().set_ticks([]); ax3.axes.get_xaxis().set_ticks([])
ax0.axes.get_yaxis().set_ticks([]); ax1.axes.get_yaxis().set_ticks([]); ax2.axes.get_yaxis().set_ticks([]); ax3.axes.get_yaxis().set_ticks([])
fig0=aplpy.FITSFigure(img0, figure=f, subplot=ax0.get_position().bounds); fig0.show_grayscale(invert=True)
fig1=aplpy.FITSFigure(img1, figure=f, subplot=ax1.get_position().bounds); fig1.show_grayscale(invert=True)
fig2=aplpy.FITSFigure(img2, figure=f, subplot=ax2.get_position().bounds); fig2.show_grayscale(invert=True)
fig3=aplpy.FITSFigure(img3, figure=f, subplot=ax3.get_position().bounds); fig3.show_grayscale(invert=True)
fig0.axis_labels.hide_x(); fig0.axis_labels.hide_y(); fig0.tick_labels.hide_x(); fig0.tick_labels.hide_y()
fig1.axis_labels.hide_x(); fig1.axis_labels.hide_y(); fig1.tick_labels.hide_x(); fig1.tick_labels.hide_y()
fig2.axis_labels.hide_x(); fig2.axis_labels.hide_y(); fig2.tick_labels.hide_x(); fig2.tick_labels.hide_y()
fig3.axis_labels.hide_x(); fig3.axis_labels.hide_y(); fig3.tick_labels.hide_x(); fig3.tick_labels.hide_y()
f.savefig('test.png')
재미있는 점 ... nordev가 제안한 것과 같은 for 루프를 사용하면 4 개의 모든 플롯이 2 차가 아니게됩니다.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib import gridspec
import aplpy
f=plt.figure()
gs=gridspec.GridSpec(1,4)
#img0,... are strings representing the image path
img_list=[img0, img1, img2, img3]
for i in range(0,4):
ax=plt.subplot(gs[0,i])
ax.set_aspect('equal')
ax.axes.get_xaxis().set_ticks([]); ax.axes.get_yaxis().set_ticks([])
fig=aplpy.FITSFigure(img_list[i], figure=f, subplot=ax.get_position())
fig.show_grayscale(invert=True)
fig.axis_labels.hide_x(); fig.axis_labels.hide_y()
fig.tick_labels.hide_x(); fig.tick_labels.hide_y()
f.savefig('test.png')
변수'img0','img1','img2' 및'img3'에는 무엇이 할당되어 있습니까? 이미지 경로를 나타내는 문자열? 참고 사항. 명시 적으로 모든 것을 네 번 입력하는 대신 루프를 사용하면 오류가 발생하기 쉽고 Pythonic이 더 많습니다. – hooy
예, img0, img1, img2 및 img3은 이미지 경로를 나타내는 문자열입니다. 분명히 for 루프를 사용하면 좋을 것입니다.) 죄송합니다. –
'ax.set_aspect ('equal', adjustable = 'box-forced')'를 사용해보십시오. 공유 된 축이 있다면 도움이 될 수 있습니다. – tacaswell