Eu tenho uma figura matplotlib que estou traçando dados que sempre é referido como nanossegundos (1e-9). No eixo y, se eu tiver dados que são dezenas de nanossegundos, ou seja, 44e-9, o valor no eixo mostra 4,4 com a + 1e-8 como um deslocamento. Existe alguma maneira de forçar o eixo a mostrar 44 com um deslocamento + 1e-9?
O mesmo vale para meu eixo x, onde o eixo está mostrando + 5,54478e4, onde prefiro que ele mostre um deslocamento de +55447 (número inteiro, sem decimal - o valor aqui é em dias).
Eu tentei algumas coisas como esta:
p = axes.plot(x,y)
p.ticklabel_format(style='plain')
para o eixo x, mas isso não funciona, embora eu provavelmente esteja usando incorretamente ou interpretando mal algo dos documentos, alguém pode me apontar a direção correta?
Obrigado Jonathan
Tentei fazer algo com formatadores, mas ainda não encontrei nenhuma solução ...:
myyfmt = ScalarFormatter(useOffset=True)
myyfmt._set_offset(1e9)
axes.get_yaxis().set_major_formatter(myyfmt)
e
myxfmt = ScalarFormatter(useOffset=True)
myxfmt.set_portlimits((-9,5))
axes.get_xaxis().set_major_formatter(myxfmt)
Em uma nota lateral, estou realmente confuso sobre onde o objeto 'número de deslocamento' realmente reside ... é parte dos tiques principais / secundários?
fonte
set_units
? matplotlib.sourceforge.net/api/… (Não posso tentar porque não tenho matplotlib aqui.)rcParams
desativá-lo por padrão:rcParams["axes.formatter.useoffset"] = False
como aqui: stackoverflow.com/questions/24171064/…Respostas:
Eu tive exatamente o mesmo problema, e estas linhas resolveram o problema:
fonte
ax.get_yaxis().get_major_formatter().set_useOffset(False)
from matplotlib.ticker import ScalarFormatter
código do @Gonzalo para funcionar ou simplesmente use a solução deUma solução muito mais fácil é simplesmente personalizar os rótulos dos carrapatos. Veja este exemplo:
Observe como, no caso do eixo y, eu multipliquei os valores
1e9
e mencionei essa constante no rótulo yEDITAR
Outra opção é falsificar o multiplicador de expoentes adicionando manualmente seu texto no topo do gráfico:
EDIT2
Além disso, você pode formatar o valor de deslocamento do eixo x da mesma maneira:
fonte
Você tem que criar uma subclasse
ScalarFormatter
para fazer o que você precisa ..._set_offset
apenas adiciona uma constante que você deseja definirScalarFormatter.orderOfMagnitude
. Infelizmente, a configuração manualorderOfMagnitude
não fará nada, já que é redefinida quando aScalarFormatter
instância é chamada para formatar os rótulos de escala do eixo. Não deveria ser tão complicado, mas não consigo encontrar uma maneira mais fácil de fazer exatamente o que você deseja ... Aqui está um exemplo:O que produz algo como:
Visto que a formatação padrão seria assim:
Espero que ajude um pouco!
Editar: pelo que vale a pena, também não sei onde o rótulo de deslocamento reside ... Seria um pouco mais fácil apenas configurá-lo manualmente, mas não consegui descobrir como fazer isso ... Tenho a sensação que tem que haver uma maneira mais fácil do que tudo isso. Mas funciona!
fonte
Semelhante à resposta de Amro, você pode usar FuncFormatter
fonte
A solução de Gonzalo começou a funcionar para mim depois de adicionar
set_scientific(False)
:fonte
Conforme apontado nos comentários e nesta resposta , o deslocamento pode ser desativado globalmente, fazendo o seguinte:
fonte
Acho que uma forma mais elegante é usar o formatador de ticker. Aqui está um exemplo para eixo xis e eixo y:
fonte
Para a segunda parte, sem redefinir manualmente todos os ticks novamente, esta foi a minha solução:
obviamente, você pode definir a string de formato para o que quiser.
fonte