Her iki eksende de aynı uzunlukta matplotlib'de bir şekle ihtiyacım var. Bunun için 'eşit' seçeneğini kullanıyorum. Çoğu durumda oldukça iyi çalışır ve beklenen sonuçları elde ederim (bkz. Şekil 1), ancak y ekseninin değerleri x'den çok yüksek olduğunda, bu şekil beklenmedik bir davranış gösterir (bkz. Şekil 2). Matplotlib'in bu davranışını bilen var mı?matplotlib axes.set_aspect ('equal') beklenen şekilde davranmıyor
Danke Jörg
host = SubplotHost(fig, 111)
try:
min_x_val = min(x for x in self.x_values if x is not None)
max_x_val = max(self.x_values)
except ValueError:
return
max_y_val = list()
for n, evaluator in enumerate(self.cleaned_evaluators):
max_y_val.append(max(self.y_values[n]))
# axis settings
host.axis['left'].label.set_fontsize('small')
host.axis['left'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].label.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_rotation(0)
host.set_ylabel(y_label)
host.set_xlabel(x_label)
host.set_xlim(0, max_x_val)
host.set_ylim(0, max_y_val)
host.minorticks_on()
host.toggle_axisline(False)
host.axes.set_aspect('equal')
host.grid(True, alpha=0.4)
return fig
Şekil 1:
Şekil 2:
bu expected.'set_aspect gibi davranır ('eşit') 'x-ekseni üzerinde bir birim üzerinde bir ünite ile aynı uzunlukta olduğu anlamına gelir Y ekseninde, Şekil 1'de görüldüğü gibi. – hooy
Sayısal bir değeri "set_aspect" öğesine iletebilirsiniz, [belgeler] 'e bakın (http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_aspect). 'X' ve 'y' bölümlerini alarak, eksenleri aynı uzunlukta olacak şekilde ölçeklendirebilmelisiniz. – Bakuriu
İlk örneğinizin (Şekil 1) aslında kare olmadığını unutmayın; 430 piksel genişliğinde 400 piksel yüksekliğinde. Bu, iki eksen için biraz farklı veri aralıkları ile tutarlıdır (x ekseni için 0 ila 3.5, y ekseni için 0 ila 3.25), çünkü set_aspect ('eşit') ', aynı veri ölçeklemesini zorlar (veri) her iki eksen için de piksel başına değerler). –