세 번째 매력. 내 생각 엔 이것이 버그이고 Zhenya의 대답 은 최신 버전에서 수정 되었음을 제안합니다. 버전 0.99.1.1이 있고 다음 솔루션을 만들었습니다.
import matplotlib.pyplot as plt
import numpy as np
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_xlabel('xlabel')
ax.set_aspect(2)
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
forceAspect(ax,aspect=1)
fig.savefig('force.png')
이것은 'force.png'입니다.
아래는 실패했지만 유익한 시도입니다.
두 번째 답변 :
아래의 내 '원래 답변'은 과잉 axes.set_aspect()
입니다. 나는 당신이 사용하고 싶다고 생각합니다 axes.set_aspect('auto')
. 이것이 왜 그런지 이해하지 못하지만, 예를 들어 다음 스크립트와 같이 정사각형 이미지 플롯을 생성합니다.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_aspect('equal')
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
가로 세로 비율이 '동일'인 이미지 플롯
과 '자동'가로 세로 비율이 있는 이미지 플롯을 생성합니다
.
아래 '원래 답변'에 제공된 코드는 명시 적으로 제어되는 종횡비의 시작점을 제공하지만 imshow가 호출되면 무시되는 것 같습니다.
원래 답변 :
다음은 원하는 종횡비를 얻을 수 있도록 서브 플롯 매개 변수를 조정하는 루틴의 예입니다.
import matplotlib.pyplot as plt
def adjustFigAspect(fig,aspect=1):
'''
Adjust the subplot parameters so that the figure has the correct
aspect ratio.
'''
xsize,ysize = fig.get_size_inches()
minsize = min(xsize,ysize)
xlim = .4*minsize/xsize
ylim = .4*minsize/ysize
if aspect < 1:
xlim *= aspect
else:
ylim /= aspect
fig.subplots_adjust(left=.5-xlim,
right=.5+xlim,
bottom=.5-ylim,
top=.5+ylim)
fig = plt.figure()
adjustFigAspect(fig,aspect=.5)
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
fig.savefig('axAspect.png')
이렇게하면 다음과 같은 그림이 생성됩니다.
그림에 여러 개의 서브 플롯이있는 경우 제공된 루틴에 y 및 x 서브 플롯의 수를 키워드 매개 변수 (기본값은 각각 1)로 포함하고 싶을 것입니다. 그런 다음 해당 숫자와 hspace
및 wspace
키워드를 사용하여 모든 서브 플롯이 올바른 종횡비를 갖도록 할 수 있습니다.
ax.axis('equal')
우연히 시도 했습니까 ? 모두가 말했듯이, 당신이 한 일은 효과가 있지만ax.axis
해결 방법을 시도하는 또 다른 경로가 될 수 있습니다.