wake-up-neo.net

Matplotlib: Legen Sie das Format der Gleitkommazahlen fest

Ich versuche, das Format in einer Matplotlib-Subplot-Umgebung auf zwei Dezimalzahlen zu setzen. Ich habe leider keine Ahnung, wie ich diese Aufgabe lösen soll.

Um die Verwendung der wissenschaftlichen Notation auf der y-Achse zu verhindern, habe ich ScalarFormatter(useOffset=False) verwendet, wie Sie in meinem folgenden Ausschnitt sehen. Ich denke, meine Aufgabe sollte gelöst werden, indem dem verwendeten Formatierer weitere Optionen/Argumente übergeben werden. In der Dokumentation von matplotlib konnte ich jedoch keinen Hinweis finden.

Wie kann ich zwei Dezimalstellen einstellen oder keine (beide Fälle sind erforderlich)? Ich kann leider keine Beispieldaten zur Verfügung stellen.


- SNIPPET -

f, axarr = plt.subplots(3, sharex=True)

data = conv_air
x = range(0, len(data))

axarr[0].scatter(x, data)
axarr[0].set_ylabel('$T_\mathrm{air,2,2}$', size=FONT_SIZE)
axarr[0].yaxis.set_major_locator(MaxNLocator(5))
axarr[0].yaxis.set_major_formatter(ScalarFormatter(useOffset=False))
axarr[0].tick_params(direction='out', labelsize=FONT_SIZE)
axarr[0].grid(which='major', alpha=0.5)
axarr[0].grid(which='minor', alpha=0.2)

data = conv_dryer
x = range(0, len(data))

axarr[1].scatter(x, data)
axarr[1].set_ylabel('$T_\mathrm{dryer,2,2}$', size=FONT_SIZE)
axarr[1].yaxis.set_major_locator(MaxNLocator(5))
axarr[1].yaxis.set_major_formatter(ScalarFormatter(useOffset=False))
axarr[1].tick_params(direction='out', labelsize=FONT_SIZE)
axarr[1].grid(which='major', alpha=0.5)
axarr[1].grid(which='minor', alpha=0.2)

data = conv_lambda
x = range(0, len(data))

axarr[2].scatter(x, data)
axarr[2].set_xlabel('Iterationsschritte', size=FONT_SIZE)
axarr[2].xaxis.set_major_locator(MaxNLocator(integer=True))
axarr[2].set_ylabel('$\lambda$', size=FONT_SIZE)
axarr[2].yaxis.set_major_formatter(ScalarFormatter(useOffset=False))
axarr[2].yaxis.set_major_locator(MaxNLocator(5))
axarr[2].tick_params(direction='out', labelsize=FONT_SIZE)
axarr[2].grid(which='major', alpha=0.5)
axarr[2].grid(which='minor', alpha=0.2)
32
albert

Siehe die entsprechende Dokumentation in allgemein und speziell

from matplotlib.ticker import FormatStrFormatter

fig, ax = plt.subplots()

ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))

enter image description here

69
tacaswell

Die Antwort oben ist wahrscheinlich der richtige Weg, aber es hat nicht funktioniert. 

Der gehackte Weg, der es für mich gelöst hat, war folgender: 

ax = <whatever your plot is> 
# get the current labels 
labels = [item.get_text() for item in ax.get_xticklabels()]
# Beat them into submission and set them back again
ax.set_xticklabels([str(round(float(label), 2)) for label in labels])
# Show the plot, and go home to family 
plt.show()
10
sapo_cosmico

In matplotlib 3.1 können Sie auch ticklabel_format verwenden. So verhindern Sie die wissenschaftliche Notation ohne Versatz:

plt.gca().ticklabel_format(axis='both', style='plain', useOffset=False)
0
foxpal

Wenn Sie direkt mit matplotlibs Pyplot (plt) arbeiten und wenn Sie mit der Formatzeichenfolge im neuen Stil besser vertraut sind, können Sie Folgendes versuchen:

from matplotlib.ticker import StrMethodFormatter
plt.gca().yaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}')) # No decimal places
plt.gca().yaxis.set_major_formatter(StrMethodFormatter('{x:,.2f}')) # 2 decimal places

Aus der Dokumentation :

class matplotlib.ticker.StrMethodFormatter (fmt) 

Verwenden Sie eine Formatzeichenfolge im neuen Stil (wie von str.format () verwendet), um die .__-Datei zu formatieren. Tick.

Das für den Wert verwendete Feld muss mit x gekennzeichnet sein und das Feld für Die Position muss mit Pos gekennzeichnet sein.

0
CodeWarrior