wissenschaftliche Grenzen matplotlib Einstellung, wenn ich matplotlib y-Achse ticklabels wissenschaftlichen Modus es mir einen Exponenten an der Spitze der y-Achse des Formulars 1e-5
einstellt Exponenten Text nach Zur Zeit Achse
gibt würde Ich mag Um dies zu ändern, lesen Sie r'$\mathregular{10^{-5}}$'
, so dass es gut ausdruckt.
Hier ist mein Beispielcode:
# Create a figure and axis
fig, ax = plt.subplots()
# Plot 100 random points
# the y values of which are very small
ax.scatter(np.random.rand(100), np.random.rand(100)/100000.0)
# Set the y limits appropriately
ax.set_ylim(0, 1/100000.0)
# Change the y ticklabel format to scientific format
ax.ticklabel_format(axis='y', style='sci', scilimits=(-2, 2))
# Get the offset value
offset = ax.yaxis.get_offset_text()
# Print it out
print '1st offset printout: {}'.format(offset)
# Run plt.tight_layout()
plt.tight_layout()
# Print out offset again - you can see the value now!
print '2nd offset printout: {}'.format(offset)
# Change it to latex format
offset.set_text(r'$\mathregular{10^{-5}}$')
# Print it out
print '3rd offset printout: {}'.format(offset)
# Add some text to the middle of the figure just to
# check that it isn't the latex format that's the problem
ax.text(0.5, 0.5/100000.0, r'$\mathregular{10^{-2}}$')
# And show the figure
plt.show()
Meine Ausgabe wie folgt aussieht:
1st offset printout: Text(0,0.5,u'')
2nd offset printout: Text(0,636.933,u'1e\u22125')
3rd offset printout: Text(0,636.933,u'$\\mathregular{10^{-5}}$')
Sie können den Code und Ausbringungs here finden.
Es gibt zwei Kuriositäten: Eine ist, dass ich nicht die 1e-5 an der Spitze der y-Achse (was das Ziel ist) überschreiben, und die andere ist, dass ich plt.tight_layout()
ausführen muss, um sogar zu sehen dieser Unicode-Wert als Offset.
Kann mir jemand sagen, wo ich falsch liege?
Danke
EDIT: Die ursprüngliche Frage nicht klar gemacht hat, dass ich die Exponenten automatisch möchte ermitteln, wie sie derzeit von ticklabel_format
berechnet wird. Anstatt also eine festgelegte Zeichenfolge an den Offset-Text zu übergeben, sollte dieser Wert automatisch erkannt und die Latex-Zeichenfolge entsprechend angepasst werden.
Sehr ordentlich. Ich nehme an, das ist ein Fehler in Matplotlib, da Sie die Zeichenfolge 'Offsettext' direkt ersetzen können. Ihre Beschreibung ist etwas verwirrend - Sie fügen diese Zeichenfolge nicht hinzu, sondern deaktivieren den Offsettext und fügen die Latexbeschriftung an derselben Stelle ein. Im Idealfall würde der Ersetzungstext auf der Position von ax_axis.get_offset_text(). Get_position() 'basieren. Ich konnte keinen Weg finden, dies zu tun, da "pos" in Pixeleinheiten ist (glaube ich), oder? –
Sie haben Recht - ich bearbeite jetzt meinen Bezug auf 'pos' in der Antwort. Ich konnte nicht herausfinden, was ich mit diesen Zahlen anfangen sollte (tatsächlich kam mir nicht in den Sinn, dass es sich um Pixelkoordinaten handelte - gut geraten!). Haben Sie Vorschläge, wie Sie die Werte aktualisieren können, ohne plt.tight_layout() auszuführen? – KirstieJane