matplotlib에서 가로 세로 비율을 설정하려면 어떻게 해야 합니까?
사각형 플롯(imshow 사용), 즉 가로 세로 비율을 1:1로 만들려고 하는데 그럴 수가 없습니다.다음 작업이 없습니다.
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
전화가 그냥 무시되는 것처럼 보입니다(매트플롯립과 관련하여 자주 겪는 문제).
plt.gca()를 사용하여 현재 축을 가져오고 측면을 설정하는 간단한 옵션
plt.gca().set_aspect('equal')
당신의 마지막 대사를 대신하여
세 번째 매력.제 추측으로는 이것은 버그이며 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
키워드를 사용하면 모든 하위 플롯의 가로 세로 비율이 올바른지 확인할 수 있습니다.
무입니까는 입니까?matplotlib
실행 중인 버전?에 최에로업드했습야다니해이근그레로 해야 했습니다.1.1.0
그리고 그것과 함께,add_subplot(111,aspect='equal')
저한테는 효과가 있어요.
위의 답변으로 수년간 성공한 후, 저는 이것이 다시 작동하지 않는다는 것을 알게 되었습니다. 하지만 저는 하위 플롯에 대한 작동 솔루션을 찾았습니다.
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
위의 저자(아마도 여기에 글을 올릴 수 있을 것이다)에게 전적으로 공을 돌리면서, 관련 라인은 다음과 같습니다.
ratio = 1.0
xleft, xright = ax.get_xlim()
ybottom, ytop = ax.get_ylim()
ax.set_aspect(abs((xright-xleft)/(ybottom-ytop))*ratio)
링크에는 matplotlib에서 사용하는 여러 좌표계에 대한 명확한 설명도 있습니다.
받은 모든 훌륭한 답변에 감사드립니다 - 특히 승자로 남을 @Yann's.
이 경우 다음 설정이 가장 적합합니다.
plt.figure(figsize=(16,9))
여기서 (16,9)는 그림 가로 세로 비율입니다.
당신은 무화과 측면을 시도해야 합니다.저한테는 효과가 있어요.문서에서:
지정된 가로 세로 비율로 그림을 만듭니다.arg가 숫자인 경우 가로 세로 비율을 사용합니다.> arg가 배열인 경우, figaspect는 배열 보존 가로 세로 비율에 맞는 그림의 너비와 높이를 결정합니다.그림 너비, 높이(인치)가 반환됩니다.다음과 같이 높이와 높이가 같은 축을 작성해야 합니다.
사용 예:
# make a figure twice as tall as it is wide
w, h = figaspect(2.)
fig = Figure(figsize=(w,h))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.imshow(A, **kwargs)
# make a figure with the proper aspect for an array
A = rand(5,3)
w, h = figaspect(A)
fig = Figure(figsize=(w,h))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.imshow(A, **kwargs)
편집: 무엇을 찾고 있는지 잘 모르겠습니다.위의 코드는 캔버스(플롯 크기)를 변경합니다.그림의 matplotlib 창의 크기를 변경하려면 다음을 사용합니다.
In [68]: f = figure(figsize=(5,1))
그러면 5x1(wxh)의 창이 생성됩니다.
이 대답은 Yann의 대답을 바탕으로 한 것입니다.선형 또는 로그 로그 그림에 대한 가로 세로 비율을 설정합니다.저는 https://stackoverflow.com/a/16290035/2966723 의 추가 정보를 사용하여 축이 로그 스케일인지 테스트했습니다.
def forceAspect(ax,aspect=1):
#aspect is width/height
scale_str = ax.get_yaxis().get_scale()
xmin,xmax = ax.get_xlim()
ymin,ymax = ax.get_ylim()
if scale_str=='linear':
asp = abs((xmax-xmin)/(ymax-ymin))/aspect
elif scale_str=='log':
asp = abs((scipy.log(xmax)-scipy.log(xmin))/(scipy.log(ymax)-scipy.log(ymin)))/aspect
ax.set_aspect(asp)
분명히 당신은 어떤 버전의 것을 사용할 수 있습니다.log
당신이 원한다면, 나는 사용했습니다.scipy
,그렇지만numpy
또는math
괜찮을 겁니다.
언급URL : https://stackoverflow.com/questions/7965743/how-can-i-set-the-aspect-ratio-in-matplotlib
'programing' 카테고리의 다른 글
무작위 선택에 "필수 질문" 포함 (0) | 2023.06.15 |
---|---|
내보낸 모듈 내에서 Vuex mapActions를 사용할 수 있습니까? (0) | 2023.06.15 |
eplus를 통해 excel 공식을 호출합니다. (0) | 2023.06.15 |
셀의 숫자를 사용하여 셀 참조 생성 (0) | 2023.06.15 |
Angular 2 활성화된 경로 매개 변수가 서비스 내 또는 외부에서 작동하지 않음 (0) | 2023.06.15 |