2013-02-13 62 views
67

檢查下圖中的x軸。我如何將標籤向左移動一點,以便它們與各自的刻度對齊?對齊旋轉的xticklabels及其各自的xticks

我使用旋轉標籤:

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

但是,正如你所看到的,旋轉的文本標籤的中間居中。這使得它看起來像是向右移動。

我已經嘗試使用這個:

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

...但它不會做什麼我祝願。 "anchor"似乎是rotation_mode參數允許的唯一值。

Example

回答

116

您可以設置ticklabels的水平對齊方式,請參見下面的例子。如果您想象旋轉標籤周圍有一個矩形框,矩形的哪一邊是否與tickpoint對齊?

鑑於你的描述,你想:哈哈= '右'

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

旋轉標籤當然是可能的。請注意,這樣做會降低文本的可讀性。一個替代方案是替代標籤位置使用這樣的碼:

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

更多背景和替代,參見this post on my blog