2016-09-29 1 views
1

Ich möchte ax.axis('equal') verwenden, um gleichmäßige Abstände auf X & Y zu erzwingen, aber ich möchte auch bestimmte Bereiche für die X- und Y-Achse vorschreiben. Wenn die Ränder ebenfalls fixiert sind, ist das Problem überbestimmt und das Ergebnis wird auf der linken Seite der Abbildung gezeigt. Wenn stattdessen die Ränder sich automatisch vergrößern würden, um den Durchhang aufzunehmen, dann könnten xlim und ylim so bleiben, wie ich sie gesetzt habe, während sie weiterhin axis('equal') erfüllt. Ein Beispiel dafür, was ich mache, ist auf der rechten Seite von Abbildung 1 gezeigt. Wie kann ich zulassen, dass die Plotmargen "schweben"?Wie erzwinge ich sowohl xlim als auch ylim bei der Verwendung von ax.axis ('equal')?

f,ax=plt.subplots(1) #open a figure 
ax.axis('equal') #make the axes have equal spacing 
ax.plot([0,20],[0,20]) #test data set 

#change the plot axis limits 
ax.set_xlim([2,18]) 
ax.set_ylim([5,15]) 

#read the plot axis limits 
xlim2=array(ax.get_xlim()) 
ylim2=array(ax.get_ylim()) 

#define indices for drawing a rectangle with xlim2, ylim2 
sqx=array([0,1,1,0,0]) 
sqy=array([0,0,1,1,0]) 

#plot a thick rectangle marking the xlim2, ylim2 
ax.plot(xlim2[sqx],ylim2[sqy],lw=3) #this does not go all the way around the edge 

actual and desired output Abbildung 1: Ausgabe des obigen Codefragment.

+0

Sie sollten 'set_xlim' setzen,' set_ylim' bis zum Ende der automatische Neuskalierung zu vermeiden. – dnalow

+0

@dnalow Es funktioniert nicht, wenn ich alles nach 'ax.set_ylim()' lösche, und es funktioniert nicht, wenn ich 'set_xlim() ',' set_ylim() 'zum Ende kopiere, nachdem alles andere erledigt ist. –

+0

ist dies wegen 'ax.axis ('gleich'). Es fixiert das Stepping, also muss die Subplotsize an Ihre Grenzen passen, was wiederum bedeutet, dass Ihre Figurgröße oder die Subplot-Parameter übereinstimmen müssen. – dnalow

Antwort

2
ax.set_aspect('equal',adjustable='box') 

enter image description here

+0

Ich wusste, dass es so einfach sein musste. –

+0

Übrigens kann dies 'ax.axis ('equal')' in der ursprünglichen Frage ersetzen. –

+0

'adjustable = 'box-forced' ist vielleicht vorzuziehen, besonders wenn Achsen geteilt werden. Siehe http://matplotlib.org/api/axes_api.html –

Verwandte Themen