2012-02-23 16 views
35

Jeśli utworzyć wykres z matplotlib stosując następujący kod:Nakładanie oś y etykieta kleszcz i oś x etykieta kleszcz w matplotlib

import numpy as np 
from matplotlib import pyplot as plt 
xx = np.arange(0,5, .5) 
yy = np.random.random(len(xx)) 
plt.plot(xx,yy) 
plt.imshow() 

uzyskać wynik, który wygląda jak na załączonym obrazku. Problem polega na tym, że najniższa etykieta y-tick pokrywa się z największą na lewo etykietą x-tick. Ten wygląda nieprofesjonalnie. Zastanawiam się, czy istnieje automatyczny sposób, aby usunąć najniżej położoną etykietę y-tick, więc nie mam problemu z nakładaniem się na siebie. Im mniej linii kodu, tym lepiej. enter image description here

Odpowiedz

35

W module ticker istnieje klasa o nazwie MaxNLocator że może zająć prune kwarg.
Korzystanie które można usunąć pierwszy haczyk:

import matplotlib.pyplot as plt 
from matplotlib.ticker import MaxNLocator 
import numpy as np 
xx = np.arange(0,5, .5) 
yy = np.random.random(len(xx)) 
plt.plot(xx,yy) 
plt.gca().xaxis.set_major_locator(MaxNLocator(prune='lower')) 
plt.show() 

Wynik:

enter image description here

2

Zostało to szczegółowo opisane here. Zasadniczo, można użyć czegoś takiego:

plt.xticks([list of tick locations], [list of tick lables]) 
6

Bardzo elegancki sposób, aby rozwiązać problem, nakładający rośnie padding z X i Y-Tick etykiety (tj. odległość do osi). Opuszczenie rogu najbardziej etykiety nie zawsze będzie potrzebne. Moim zdaniem, ogólnie rzecz biorąc, ładnie wygląda, jeśli etykiety znajdują się nieco dalej od osi niż domyślna konfiguracja.

Wyściółka może być zmieniony za pomocą pliku matplotlibrc lub w skrypcie działki za pomocą poleceń

import matplotlib as mpl 

mpl.rcParams['xtick.major.pad'] = 8 
mpl.rcParams['ytick.major.pad'] = 8 

Najwięcej razy, podszytej 6 jest również wystarczająca.

16

Można pad kleszcze na osi x:

ax.tick_params(axis='x', pad=15) 

Wymień ax z plt.gca() jeśli nie zostały zapisane zmiennej ax dla bieżącego rysunku.

Można również zablokować obie osie, usuwając parametr axis.

+1

Wydaje się bardzo elegancki, ale niestety nie działa na poletkach 3D, takich jak 'plot_surface'. – metakermit