Je sais que cette question a déjà été posée, mais j’ai essayé toutes les solutions possibles et aucune d’entre elles n’a fonctionné pour moi.
J'ai donc un graphique log-log dans matplotlib, et j'aimerais éviter les notations scientifiques sur l'axe des x.
Ceci est mon code:
from numpy import array, log, pi
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import matplotlib.ticker as mticker
plt.rc('axes.formatter', useoffset=False)
tc = array([7499680.0, 12508380.0, 23858280.0, 34877020.0, 53970660.0, 89248580.0, 161032860.0, 326814160.0, 784460200.0])
theta = array([70, 60, 50, 45, 40, 35, 30, 25, 20])
plt.scatter(theta,tc)
ax=plt.gca()
ax.set_xscale('log')
ax.set_yscale('log')
ax.xaxis.set_major_formatter(mticker.ScalarFormatter())
ax.xaxis.get_major_formatter().set_scientific(False)
ax.xaxis.get_major_formatter().set_useOffset(False)
plt.show()
Comme vous pouvez le constater, les nombres sur l'axe des x sont encore en notation scientifique. Je voudrais les afficher en tant que 20, 30, 40 ... J'ai essayé toutes les solutions possibles sans résultat.
Merci beaucoup à tous ceux qui aideront.
NB Je ne peux pas utiliser la commande plt.loglog (), car je fais un ajustement de la courbe sur les données et j'en ai besoin comme ça.
NB2. J'ai remarqué une chose très étrange: si je change le code en yaxis.get_mayor_formatter () ..., cela fonctionne sur l'axe des y! C'est juste sur le x que ça ne marche pas. Comment est-ce possible?
Edit: peut-être que ce n'est pas clair, mais si vous regardez le code, il existe 3 méthodes qui devraient affecter l'affichage des x-ticks: plt.rc('axes.formatter', useoffset=False)
, ax.xaxis.set_major_formatter(mticker.ScalarFormatter())
et ax.xaxis.get_major_formatter().set_scientific(False)
. Ce sont 3 méthodes qui devraient toutes faire l'affaire seules, selon ce que j'ai trouvé autour, mais elles ne le font pas. Bien sûr, je les ai aussi essayés un par un et pas tous ensemble.
Ce sont des ticks mineurs sur l’axe des x (c’est-à-dire qu’ils ne sont pas sur des puissances entières de 10), pas des ticks majeurs. matplotlib
détermine automatiquement s'il doit étiqueter les ticks majeurs ou mineurs - dans ce cas, parce que vous n'avez aucun tick important à afficher dans la plage x, les ticks mineurs sont étiquetés). Donc, vous devez utiliser la méthode set_minor_formatter
:
ax.xaxis.set_minor_formatter(mticker.ScalarFormatter())
Cela fonctionne sur l’axe des y parce que ces ticks sont des ticks majeurs (c’est-à-dire sur des puissances entières de 10) et non des ticks mineurs.
Si vous souhaitez désactiver les notations offset et scientifique, utilisez ax.ticklabel_format(useOffset=False, style='plain')
.