2017-10-27 5 views
0

Ich versuche, eine Figur zu formatieren, die ich mache. Ich habe versucht, das Seitenverhältnis einzustellen, aber wenn ich den Seitenverhältnisaufruf einschließe oder ax.set_aspect() verwende, lande ich mit einer abgeflachten Figur.Probleme mit der Einstellung des Seitenverhältnisses in Matplotlib, Python 3.6, Abflachung Figur

fig, ax = plt.subplots(1, 1) 
plt.rcParams["font.family"] = 'Calibri' 

ax.set(xlim=[415, 700], ylim=[0,1.01], aspect=1) 

ax.set_xlabel('Wavelength (nm)') 
ax.set_ylabel('Normalized Reflectance (a.u.)') 

_ = ax.plot(x_lambda[0], y_refl_norm[0], marker='', linestyle='-', color='m') 
_ = ax.plot(x_lambda[1], y_refl_norm[1], marker='', linestyle='-', color='b') 
_ = ax.plot(x_lambda[2], y_refl_norm[2], marker='', linestyle='-', color='c') 
_ = ax.plot(x_lambda[3], y_refl_norm[3], marker='', linestyle='-', color='g') 
_ = ax.plot(x_lambda[4], y_refl_norm[4], marker='', linestyle='-', color='y') 
_ = ax.plot(x_lambda[5], y_refl_norm[5], marker='', linestyle='-', 
color='orange') 
_ = ax.plot(x_lambda[6], y_refl_norm[6], marker='', linestyle='-', color='r') 

ax.legend(('30 degrees', '35 degrees', '40 degrees', '45 degrees', '50 
degrees', '55 degrees', '60 degrees'), loc='lower left', fontsize='x-small', 
frameon='True', facecolor='navajowhite', framealpha=0.95) 

Without the "aspect=1"

With the "aspect=1"

Antwort

0

Was würden Sie, wenn der Bereich der x-Achse erwarten ist ~ 300x größer als der Bereich auf der y-Achse? Mit aspect=1 erhalten Sie eine Figur, deren Höhe ~ 300x kleiner ist als die Breite.

Nehmen Sie dieses einfache Beispiel:

import matplotlib.pylab as pl 

pl.figure() 
pl.subplot(231, aspect=1) 
pl.fill_between([0,1],[0,0],[1,1]) 
pl.xlim(0,10) 
pl.ylim(0,10) 

pl.subplot(232, aspect=1) 
pl.fill_between([0,1],[0,0],[1,1]) 
pl.xlim(0,10) 
pl.ylim(0,5) 

pl.subplot(233, aspect=1) 
pl.fill_between([0,1],[0,0],[1,1]) 
pl.xlim(0,10) 
pl.ylim(0,1) 

pl.subplot(234) 
pl.fill_between([0,1],[0,0],[1,1]) 
pl.xlim(0,10) 
pl.ylim(0,10) 

pl.subplot(235) 
pl.fill_between([0,1],[0,0],[1,1]) 
pl.xlim(0,10) 
pl.ylim(0,5) 

pl.subplot(236) 
pl.fill_between([0,1],[0,0],[1,1]) 
pl.xlim(0,10) 
pl.ylim(0,1) 

Wenn der x-Bereich auf den y-Bereich gleich ist, dass Sie mit einem quadratischen Bild, um das Seitenverhältnis der x-to-y-Achse zu halten am Ende gleich (schwarzer Block = Quadrat). Wenn der y-Bereich der halbe x-Bereich ist, ist die Höhe die halbe Breite, um das Seitenverhältnis gleich zu halten.

In Ihrem Fall ist die einzige Lösung, ein Seitenverhältnis ungleich eins zu verwenden, es sei denn, Sie möchten eine vieeeeery breite Zahl machen, um die Y-Achse lesbar zu halten.

enter image description here

+1

Vielen Dank! Ich glaube, ich habe wirklich missverstanden, was "aspect = 1" bedeutet, aber das macht viel mehr Sinn, dass es eher der Aspekt der Daten als das Seitenverhältnis der gedruckten Figur ist. – yixingking

+0

Fehler Seitenverhältnis der Achsen * – yixingking

+0

Es ist ziemlich einfach, das Seitenverhältnis der Figur einzustellen, siehe z.B. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib – Bart

Verwandte Themen