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)
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()
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)
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.