Ik probeer het formaat in te stellen op twee decimale getallen in een matplotlib-subplotomgeving. Helaas heb ik geen idee hoe ik deze taak moet oplossen.
Om het gebruik van wetenschappelijke notatie op de y-as te voorkomen, heb ik ScalarFormatter(useOffset=False)
gebruikt, zoals je kunt zien in mijn fragment hieronder. Ik denk dat mijn taak moet worden opgelost door verdere opties/argumenten door te geven aan de gebruikte formatter. Ik kon echter geen enkele hint vinden in de documentatie van matplotlib.
Hoe kan ik twee decimalen of geen cijfers instellen (beide gevallen zijn nodig)? Ik kan helaas geen voorbeeldgegevens verstrekken.
— 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)
Antwoord 1, autoriteit 100%
Zie de relevante documentatie in algemeenen specifiek
from matplotlib.ticker import FormatStrFormatter
fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))
Antwoord 2, autoriteit 24%
Als je direct werkt met matplotlib’s pyplot (plt) en als je meer bekend bent met de nieuwe stijl format string, kun je dit proberen:
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
Van de documentatie:
klasse matplotlib.ticker.StrMethodFormatter(fmt)
Gebruik een nieuwe stijl format string (zoals gebruikt door str.format()) om de . op te maken
vink aan.Het veld dat voor de waarde wordt gebruikt, moet het label x hebben en het veld dat wordt gebruikt voor
de positie moet worden gelabeld met pos.
Antwoord 3, autoriteit 16%
Het bovenstaande antwoord is waarschijnlijk de juiste manier om het te doen, maar werkte niet voor mij.
De hacky manier om het voor mij op te lossen was de volgende:
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()