2013-02-13 8 views
67

sprawdzić oś X na rysunku. Jak mogę przesunąć etykiety nieco w lewo, aby dopasować je do odpowiadających im znaczników?Wyrównywanie obracany xticklabels z ich xticks

mam obracania etykiet przy użyciu:

ax.set_xticks(xlabels_positions) 
ax.set_xticklabels(xlabels, rotation=45) 

Ale, jak widać, obrót koncentruje się na środku etykiety tekstowe. Co sprawia, że ​​wygląda tak, jakby były przesunięte w prawo.

Próbowałem przy użyciu to zamiast:

ax.set_xticklabels(xlabels, rotation=45, rotation_mode="anchor") 

... ale to nie to, co chciałem na. I "anchor" wydaje się być jedyną dozwoloną wartością parametru rotation_mode.

Example

Odpowiedz

116

Można ustawić poziome wyrównanie ticklabels, patrz przykład poniżej. Jeśli wyobrażasz sobie prostokątne okienko wokół obróconej etykiety, która strona prostokąta ma być wyrównana z punktem wskazującym?

Biorąc pod uwagę Twój opis, chcesz: ha = 'right'

n=5 

x = np.arange(n) 
y = np.sin(np.linspace(-3,3,n)) 
xlabels = ['Ticklabel %i' % i for i in range(n)] 

fig, axs = plt.subplots(1,3, figsize=(12,3)) 

ha = ['right', 'center', 'left'] 

for n, ax in enumerate(axs): 
    ax.plot(x,y, 'o-') 
    ax.set_title(ha[n]) 
    ax.set_xticks(x) 
    ax.set_xticklabels(xlabels, rotation=40, ha=ha[n]) 

enter image description here

0

Obrotowy etykiety jest z pewnością możliwe. Należy jednak pamiętać, że zmniejsza to czytelność tekstu. Jedną z możliwości jest alternatywnych pozycjach etykiet za pomocą kodu:

import numpy as np 
n=5 

x = np.arange(n) 
y = np.sin(np.linspace(-3,3,n)) 
xlabels = ['Long ticklabel %i' % i for i in range(n)] 


fig, ax = plt.subplots() 
ax.plot(x,y, 'o-') 
ax.set_xticks(x) 
labels = ax.set_xticklabels(xlabels) 
for i, label in enumerate(labels): 
    label.set_y(label.get_position()[1] - (i % 2) * 0.075) 

enter image description here

uzyskać więcej tła i alternatyw, zobacz this post on my blog

Powiązane problemy