Stworzyłem tę fabułę za pomocą Matlab
Używając matplotlib, oś x rysuje duże liczby, takie jak 100000, 200000, 300000. Chciałbym mieć wartości takie jak 1, 2, 3 i 10 ^ 5, aby wskazać, że to w rzeczywistości 100000, 200000, 300000.
Czy istnieje prosty sposób na utworzenie takiej skali w matplotlib?
python
matplotlib
Orzeł
źródło
źródło
ticklabel_format
jest również metodą na obiekty osi, możesz spróbować czegoś takiego jakax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
[0.1, 0.2, ...]
i wolałbym[1, 2, ...]
z dopasowanym wykładnikiem. czy udało Ci się znaleźć na to rozwiązanie?Jest to nie tyle odpowiedź na Twoje pierwotne pytanie, ile na jedno z pytań, które zadałeś w treści swojego pytania.
Mała preambuła, aby moje nazewnictwo nie wydawało się dziwne:
import matplotlib from matplotlib import rc from matplotlib.figure import Figure ax = self.figure.add_subplot( 111 )
Jak już wspomniano, możesz użyć ticklabel_format, aby określić, że matplotlib powinien używać notacji naukowej dla dużych lub małych wartości:
ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')
Możesz wpłynąć na sposób, w jaki jest to wyświetlane, używając flag w rcParams (z matplotlib import rcParams) lub ustawiając je bezpośrednio. Nie znalazłem bardziej eleganckiego sposobu zmiany notacji naukowej między „1e” a „x10 ^” niż:
ax.xaxis.major.formatter._useMathText = True
To powinno dać ci więcej Matlab-esc i prawdopodobnie lepszy wygląd. Myślę, że to samo powinno zrobić:
rc('text', usetex=True)
źródło
W skalarne formater podpory zbieranie wykładniki. Dokumenty są następujące:
twoja technika byłaby:
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)
Aby wykładnik był wyświetlany w formacie
x10^5
, utwórz wystąpienie ScalarFormatter zuseMathText=True
.Możesz również użyć:
xfmt.set_useOffset(10000)
Aby uzyskać taki wynik:
źródło
useMathText=True
aby uzyskaćx10^4
.Znajduję proste rozwiązanie
pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4))
źródło