So verhindern Sie, dass Zahlen in Python matplotlib in Exponentialform geändert werden


74

Ich verwende Matplotlib in Python, um einfache xy-Datensätze zu zeichnen. Dies führt zu gut aussehenden Diagrammen. Wenn ich jedoch verschiedene Bereiche des gezeichneten Diagramms mithilfe der Abbildungansicht (die bei der Ausführung angezeigt wird plt.show()) zu nahe heran zoome, ändern sich die Werte der x-Achse gegenüber der Standardnummernform (1050, 1060, 1070 usw.) in wissenschaftlicher Form mit Exponentialschreibweise (zB 1, 1,5, 2,0 mit der Bezeichnung x-Achse angegeben als +1.057e3).

Ich würde es vorziehen, wenn meine Figuren die einfache Nummerierung der Achse beibehalten, anstatt die Exponentialform zu verwenden. Gibt es eine Möglichkeit, Matplotlib dazu zu zwingen?


Antworten:


95

Die Formatierung von Häkchen wird von einem FormatterObjekt gesteuert. Vorausgesetzt, Sie haben nichts Besonderes getan, ist dies ScalerFormatterstandardmäßig ein . Dieser Formatierer verwendet eine konstante Verschiebung, wenn die gebrochene Änderung der sichtbaren Werte sehr gering ist. Um dies zu vermeiden, schalten Sie es einfach aus:

plt.plot(arange(0,100,10) + 1000, arange(0,100,10))
ax = plt.gca()
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()

Wenn Sie die wissenschaftliche Notation im Allgemeinen vermeiden möchten,

ax.get_xaxis().get_major_formatter().set_scientific(False)

Kann dies global über den axes.formatter.useoffsetrcparam steuern.


1
Danke, das funktioniert. Entschuldigung auch für die doppelte Frage - Ich habe vor dem Posten gesucht, aber meine Suche enthielt Begriffe wie "wissenschaftliche Notation" und "Exponentialform" anstelle von "relativen Achsenverschiebungen", wie sie der vorherige Benutzer verwendet hat.
IanRoberts

2
Gibt es eine Möglichkeit, diese Änderung dauerhaft zu erzwingen? Ich habe die wissenschaftlichen Notationsachsen nie gefunden und sie am Ende immer ausgeschaltet. Ich konnte dafür allerdings kein rcParam sehen.
IanRoberts

1
@ IanRoberts Siehe Update, es ist der axes.formatter.useoffsetrcparam
tacaswell

3
Vielen Dank! Ich persönlich würde es vorziehen, diese Einstellung standardmäßig auf "Falsch" zu setzen, da sie viele zu verwirren scheint und nur wenigen zugute kommt.
IanRoberts

Richtig, guter Punkt. Das war eine ziemlich unbegründete Behauptung, obwohl ich einige Leute gesehen habe, die gefragt haben, wie man dies deaktiviert. Wie auch immer, dieses Update löst es gut, so dass ich es
vorerst

24

Sie können einen einfacheren Befehl verwenden, um ihn auszuschalten:

plt.ticklabel_format(useOffset=False)

17

Sie können etwas verwenden wie:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))

Dies ist die einzige Lösung, die bei Verwendung einer Protokollachse für mich funktioniert hat. Andere Optionen Ich habe alle AttributeError: 'LogFormatterSciNotation' object has no attribute 'set_scientific'
ausgelösten

1

Verwenden Sie den folgenden Befehl: ax.ticklabel_format(useOffset=False, style='plain')

Wenn Sie eine Nebenhandlung verwenden, tritt möglicherweise Folgendes auf: AttributeError: This method only works with the ScalarFormatterIn diesem Fall würden Sie axis='y'Folgendes hinzufügen . Sie können 'y' in die Achse mit den Problemen ändern.

ax1.ticklabel_format(useOffset=False, style='plain', axis='y')

Quelle Frage und Antwort hier . Beachten Sie, dass die axis 'y'Verwendung des Befehls in den Antwortkommentaren ausgeblendet ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.