Respostas:
Tente usar matplotlib.pyplot.ticklabel_format
:
import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
Isso se aplica a notação científica (ou seja a x 10^b
) às marcas do eixo x
ticklabel_format
também é um método para os objetos de eixos, você pode tentar algo comoax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
[0.1, 0.2, ...]
e eu prefiro [1, 2, ...]
com um expoente ajustado. você conseguiu encontrar uma solução para isso?
Esta não é tanto uma resposta à sua pergunta original, mas a uma das perguntas que você tinha no corpo da pergunta.
Um pequeno preâmbulo, para que meu nome não pareça estranho:
import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )
Como foi mencionado, você pode usar ticklabel_format para especificar que matplotlib deve usar notação científica para valores grandes ou pequenos:
ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')
Você pode afetar a maneira como isso é exibido usando os sinalizadores em rcParams (de matplotlib import rcParams) ou definindo-os diretamente. Não encontrei uma maneira mais elegante de mudar entre '1e' e 'x10 ^' notação científica do que:
ax.xaxis.major.formatter._useMathText = True
Isso deve lhe dar mais Matlab-esc e, de fato, sem dúvida uma aparência melhor. Acho que o seguinte deve fazer o mesmo:
rc('text', usetex=True)
O formatador escalar suporta a coleta de expoentes. Os documentos são os seguintes:
classe matplotlib.ticker.ScalarFormatter (useOffset = True, useMathText = False, useLocale = None) Bases: matplotlib.ticker.Formatter
A localização do tique é um número simples e antigo. Se useOffset == True e o intervalo de dados for muito menor do que a média dos dados, um deslocamento será determinado de forma que os rótulos de escala sejam significativos. A notação científica é usada para dados <10 ^ -n ou dados> = 10 ^ m, onde n e m são os limites de potência definidos usando set_powerlimits ((n, m)). Os padrões para eles são controlados pelo parâmetro axes.formatter.limits rc.
sua técnica seria:
from matplotlib.ticker import ScalarFormatter
xfmt = ScalarFormatter()
xfmt.set_powerlimits((-3,3)) # Or whatever your limits are . . .
{{ Make your plot }}
gca().xaxis.set_major_formatter(xfmt)
Para obter o expoente exibido no formato x10^5
, instancie o ScalarFormatter com useMathText=True
.
Você também pode usar:
xfmt.set_useOffset(10000)
Para obter um resultado como este:
useMathText=True
para obter x10^4
.