Jak zapobiec zmianie liczb na postać wykładniczą w Pythonie

Używam Matplotlib w Pythonie do rysowania prostych zestawów danych x-y. Daje to ładnie wyglądające wykresy, chociaż gdy "przybliżę" zbyt blisko różne sekcje wykresu za pomocą widoku rysunku (który pojawia się podczas wykonywania plt.show() ), wartości osi x zmieniają się ze standardowego formularza liczbowego (1050, 1060, 1070 itd.)do postaci naukowej z notacją wykładniczą (np. 1, 1,5, 2,0 z oznaczeniem osi x podanym jako +1.057e3).

Wolałbym, aby moje figury zachowały prostą numerację osi, zamiast używać wykładniczej formy. Czy mogę zmusić Matplotliba do tego?

Author: Eric Leschinski, 2013-02-05

3 answers

Formatowanie etykiet kleszczy jest kontrolowane przez obiekt Formatter, który zakładając, że nie zrobiłeś nic wymyślnego, będzie ScalerFormatterdomyślnie . Ten formater użyje stałego przesunięcia, jeśli ułamkowa zmiana widocznych wartości jest bardzo mała. Aby tego uniknąć, po prostu go wyłącz:

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

Jeśli chcesz uniknąć notacji naukowej w ogóle,

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

Może to kontrolować globalnie za pomocą axes.formatter.useoffset rcparam.

 84
Author: tacaswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 16:18:41

Możesz użyć prostszego polecenia, aby go wyłączyć:

plt.ticklabel_format(useOffset=False)
 15
Author: Eki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-05 12:15:07

Możesz użyć czegoś w rodzaju:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
 13
Author: Animesh Saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-23 14:54:00