Üçüncü kat cazibe. Benim tahminim bu bir hata olduğunu ve olmasıdır ZHenya cevabı o son sürümünde onarıldı göstermektedir. 0.99.1.1 sürümüne sahibim ve aşağıdaki çözümü oluşturdum:
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')
Bu "force.png" dir:
Başarısız, ancak umarım bilgilendirici girişimlerim aşağıdadır.
İkinci Cevap:
Aşağıdaki 'orijinal cevabım', benzer bir şey yaptığı için abartılı axes.set_aspect()
. Sanırım kullanmak istiyorsun axes.set_aspect('auto')
. Neden böyle olduğunu anlamıyorum, ama benim için kare bir görüntü çizimi oluşturuyor, örneğin şu komut dosyası:
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')
En boy oranına 'eşit'
ve 'otomatik' en boy oranına sahip bir görüntü grafiği üretir
:
Aşağıda 'orijinal cevapta' verilen kod, açıkça kontrol edilen bir en-boy oranı için bir başlangıç noktası sağlar, ancak bir imshow çağrıldığında göz ardı edilecek gibi görünüyor.
Orijinal Cevap:
İstenilen en boy oranını elde edebilmeniz için alt alan parametrelerini ayarlayacak bir rutin örneği aşağıda verilmiştir:
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')
Bu, şöyle bir rakam üretir:
Şekilde birden fazla alt grafiğiniz varsa, sağlanan rutine anahtar kelime parametreleri olarak (her biri 1 varsayılan olarak) y ve x alt nokta sayısını dahil etmek isteyeceğinizi hayal edebiliyorum. Sonra bu sayıları kullanarak hspace
ve wspace
anahtar kelimeleri, tüm subplots doğru orana sahip yapabilirsiniz.
ax.axis('equal')
Şans eseri denedin mi? Herkesin dediği gibi, yaptığınız şey işe yaramalı, ancakax.axis
geçici bir çözüm için denemenin başka bir yolu olabilir.