Gönderen plt.imshow()
resmi kılavuz, biz bu yönü kumandaları eksenlerinin boy oranını biliyoruz. Benim sözlerime göre, en boy oranı tam olarak x birimi ve y biriminin oranıdır . Rakamları istemeden deforme etmek istemediğimiz için çoğu zaman 1 olarak tutmak isteriz. Ancak, görünüşü 1'den başka bir değer belirlememiz gereken durumlar vardır. Soru soran kişi, x ve y ekseninin farklı fiziksel birimlere sahip olabileceğine dair iyi bir örnek sağlamıştır. X'in km cinsinden ve y'nin m cinsinden olduğunu varsayalım. Bu nedenle, 10x10 verisi için, genişlik [0,10km, 0,10m] = [0, 10000m, 0, 10m] olmalıdır. Böyle bir durumda, varsayılan en boy oranını = 1 kullanmaya devam edersek, şeklin kalitesi gerçekten kötüdür. Dolayısıyla, rakamımızı optimize etmek için en boy = 1000 belirtebiliriz. Aşağıdaki kodlar bu yöntemi göstermektedir.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
rng=np.random.RandomState(0)
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 10000, 0, 10], aspect = 1000)
Yine de, soruyu soranın talebini karşılayabilecek bir alternatif olduğunu düşünüyorum. Genişliği [0,10,0,10] olarak ayarlayabilir ve birimleri belirtmek için ek xy ekseni etiketleri ekleyebiliriz. Aşağıdaki kodlar.
plt.imshow(data, origin = 'lower', extent = [0, 10, 0, 10])
plt.xlabel('km')
plt.ylabel('m')
Bir yapmak için doğru rakam, her zaman akılda ki taşımalıdır x_max-x_min = x_res * data.shape[1]
ve y_max - y_min = y_res * data.shape[0]
nerede extent = [x_min, x_max, y_min, y_max]
. Varsayılan olarak, aspect = 1
birim pikselin kare olduğu anlamına gelir. Bu varsayılan davranış, farklı değerlere sahip x_res ve y_res için de iyi çalışır. Önceki örneği genişleterek, x_res'in 1.5 ve y_res'in 1 olduğunu varsayalım. Dolayısıyla, kapsam [0,15,0,10] 'a eşit olmalıdır. Varsayılan en boy oranını kullanarak, dikdörtgen renkli piksellere sahip olabiliriz, oysa birim piksel hala karedir!
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10])
data=rng.randn(10,5)
plt.imshow(data, origin = 'lower', extent = [0, 5, 0, 5])
Renk pikselinin yönü x_res / y_res
. en boyunu birim piksel boyutuna ayarlamak (yani aspect = x_res / y_res = ((x_max - x_min) / data.shape[1]) / ((y_max - y_min) / data.shape[0])
) her zaman kare renkli piksel verecektir. En boy = 1.5'i değiştirebiliriz, böylece x ekseni birimi 1.5 kez y ekseni birimi olur, bu da kare renkli bir piksele ve kare tam şekle ancak dikdörtgen piksel birimine yol açar. Görünüşe göre normalde kabul edilmiyor.
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.5)
En istenmeyen durum, en boy oranını 1.2 gibi rastgele bir değere ayarlamaktır; bu, ne kare birim piksellere ne de kare renkli piksellere yol açmaz.
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.2)
Uzun lafın kısası, doğru kapsamı belirlemek ve matplotlib'in bizim için kalan şeyleri yapmasına izin vermek her zaman yeterlidir (x_res! = Y_res olsa bile)! Görünümü yalnızca bir zorunluluk olduğunda değiştirin.
scalar
seçenek hakkında hiçbir şey söylememesi tuhaf .y-axis
Verilen skalere göre ölçekleniyor gibi görünüyor .