Chcę wprowadzić zmiany w kilku wybranych etykietach zaznaczenia na wykresie.
Na przykład, jeśli zrobię:
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
rozmiar czcionki i orientacja etykiety zaznaczenia zostały zmienione.
Jeśli jednak spróbujesz:
label.set_text('Foo')
etykieta wyboru nie jest modyfikowana. Również jeśli zrobię:
print label.get_text()
nic nie jest drukowane.
Oto trochę więcej dziwności. Kiedy spróbowałem:
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
Drukowane są tylko puste ciągi, ale wykres zawiera znaczniki oznaczone jako „0,0”, „0,5”, „1,0”, „1,5” i „2,0”.
python
matplotlib
repoman
źródło
źródło
draw()
przed próbą wydrukowania etykiet, otrzymasz to, czego oczekujesz. Ustawienie poszczególnych etykiet kleszczy jest niestety trudniejsze (dzieje się tak, że lokalizator i formatyzator kleszczy nie został zresetowany i nadpisuje rzeczy, gdy Tyset_text
). Dodaję za chwilę przykład, jeśli ktoś mnie nie pobije. Jednak w tej chwili muszę złapać autobus.Odpowiedzi:
Zastrzeżenie: Chyba, że znaczniki są już ustawione na ciąg znaków (jak to zwykle ma miejsce np. W przypadku wykresu pudełkowego), nie zadziała to z żadną wersją Matplotlib nowszą niż
1.1.0
. Jeśli pracujesz z obecnego mistrza github, to nie zadziała. Nie jestem jeszcze pewien, na czym polega problem ... Może to być niezamierzona zmiana lub może nie być ...Zwykle zrobiłbyś coś według następujących zasad:
Aby zrozumieć powód, dla którego musisz skakać przez tak wiele obręczy, musisz dowiedzieć się nieco więcej o strukturze matplotlib.
Matplotlib celowo unika wykonywania „statycznego” pozycjonowania kleszczy itp., Chyba że jest to wyraźnie nakazane. Założeniem jest, że będziesz chciał wchodzić w interakcje z fabułą, więc granice fabuły, tyknięć, naklejek itp. Będą się dynamicznie zmieniać.
Dlatego nie można po prostu ustawić tekstu danej etykiety kleszcza. Domyślnie jest on ponownie ustawiany przez Lokalizator osi i Formatyzator za każdym razem, gdy rysowany jest wykres.
Jeśli jednak Lokalizatory i Formatery są ustawione na statyczne (
FixedLocator
iFixedFormatter
odpowiednio), wówczas etykiety wyboru pozostają takie same.To jest co
set_*ticklabels
lubax.*axis.set_ticklabels
robi.Mamy nadzieję, że to nieco wyjaśnia, dlaczego zmiana indywidualnej etykiety kleszczy jest nieco skomplikowana.
Często to, co naprawdę chcesz zrobić, to po prostu przypisać określoną pozycję. W takim przypadku spójrz
annotate
zamiast tego.źródło
bold
podczas gdy inni używają czcionki „light”. Czy jest na to sposób?fig.canvas.draw()
jest to kluczoweMożna to również zrobić za pomocą pylab i xticks
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
źródło
W nowszych wersjach
matplotlib
, jeśli nie ustawisz etykiet kleszczy za pomocą szeregustr
wartości, są one''
domyślnie (a gdy rysowany jest wykres, etykiety są po prostu wartościami kleszczy). Wiedząc o tym, uzyskanie pożądanej wydajności wymagałoby czegoś takiego:a wynik:
a teraz, jeśli sprawdzisz
_xticklabels
, nie są już grupą''
.Działa w wersjach od
1.1.1rc1
do bieżącej wersji2.0
.źródło
set_xticklabels
mieszaną listę ciągów znaków i zaznacz obiekty.ax.get_xticks().tolist()
). Najczęściej głosowane rozwiązanie nie (ax.get_xtickslabels()
). Jakoś nie było w stanie wyodrębnić etykiet przedplt.show()
ekscytacją, chociaż użyłemfig.canvas.draw()
zgodnie z sugestią.Minęło trochę czasu, odkąd zadano to pytanie. Na dzień dzisiejszy (
matplotlib 2.2.2
) i po kilku lekturach i próbach uważam, że najlepszym / właściwym sposobem jest:Matplotlib ma moduł o nazwie
ticker
, która „zawiera klasy do wsparcia całkowicie konfigurowalnym lokalizowania kleszcza i formatowania” . Aby zmodyfikować konkretny tik z wykresu, dla mnie działa:Zastrzeżenie!
x
jest wartością tik ipos
jest jego względną pozycją w kolejności w osi. Zauważ, żepos
wartości zaczynają się od1
, a nie0
jak zwykle podczas indeksowania.W moim przypadku próbowałem sformatować
y-axis
histogram za pomocą wartości procentowych.mticker
ma inną klasę o nazwie,PercentFormatter
która może to zrobić łatwo bez potrzeby definiowania oddzielnej funkcji jak poprzednio:W tym przypadku
xmax
jest to wartość danych odpowiadająca 100%. Wartości procentowe są obliczane jakox / xmax * 100
, dlatego naprawiamyxmax=1.0
. Ponadtodecimals
jest liczbą miejsc dziesiętnych do umieszczenia po kropce.źródło
Klasa axes ma funkcję set_yticklabels, która pozwala ustawić etykiety znaczników, w następujący sposób:
Nadal pracuję nad tym, dlaczego powyższy przykład nie zadziałał.
źródło
To działa:
źródło
Działa to również w Matplotlib 3:
źródło
Jeśli nie współpracujesz
fig
iax
chcesz zmodyfikować wszystkie etykiety (np. W celu normalizacji), możesz to zrobić:źródło
Spróbuj tego :
źródło
możesz to zrobić:
źródło