2017-04-01 116 views
2

我怎样才能在matplotlib旋转xticklabels使每个xticklabel之间的间距相等?我怎样才能在matplotlib旋转xticklabels使每个xticklabel之间的间距相等?

例如与此代码:

import matplotlib.pyplot as plt 
import numpy as np 

# Data + parameters 
fontsize = 20 
t = np.arange(0.0, 6.0, 1) 
xticklabels = ['Full', 'token emb', 'char emb', 'char LSTM', 
       'token LSTM', 'feed forward','ANN'] 

# Plotting 
fig = plt.figure(1) 
ax = fig.add_subplot(111) 
plt.plot(t, t) 
plt.xticks(range(0, len(t) + 1)) 
ax.tick_params(axis='both', which='major', labelsize=fontsize) 
ax.set_xticklabels(xticklabels, rotation = 45) 
fig.savefig('test_rotation.png', dpi=300, format='png', bbox_inches='tight') 

我获得:

enter image description here

每个xticklabel之间的间隔是不相等的。例如,“完全”和“令牌EMB”之间的间隔比“前馈”和“ANN”之间的间距大很多。

我使用Matplotlib 2.0.0和Python 3.5的Windows 7 SP1 64位旗舰版64位。

+0

它为中心的刻度线的标签。我认为你不能改变这一点。 – bernie

回答

6

标签被在对勾标记的位置为中心。它们的边界框宽度不等,甚至可能重叠,这使得它们看起来不相等。

enter image description here

因为你总是希望ticklabels链接到自己的刻度线,改变间距是不是一个真正的选择。

但是你可能要对齐他们这样的右上角是蜱低于其定位的基准。

使用horizontalalignmentha论据是,它设置为"right"

ax.set_xticklabels(xticklabels, rotation = 45, ha="right") 

这将导致以下情节:

enter image description here

另一种可保留ticklabels水平居中,但也将它们居中放置。这导致了相等的间距,但需要进一步调整它们相对于轴的垂直位置。

ax.set_xticklabels(xticklabels, rotation = 45, va="center", position=(0,-0.28)) 

enter image description here

+0

它很棒。谢谢! –

1

更简单的解决方案是增加plt.xticks(rotation=45)到你的代码。结果是这样的:

Example Seaborn barplot with rotated x-axis

相关问题