2017-04-01 2 views
2

matplotlibでxticklabelsを回転させて、各xticklabelの間隔が等しくなるようにするにはどうすればよいですか?このコードの例各xticklabelの間隔が等しくなるように、matplotlibのxticklabelsをどのように回転できますか?

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間の間隔が不均等です。たとえば、 'Full'と 'token emb'の間隔は 'feed forward'と 'ANN'の間隔よりはるかに大きくなります。

Windows 7 SP1 x64 Ultimateでは、Matplotlib 2.0.0とPython 3.5 64ビットを使用しています。

+0

。私はあなたがそれを変更できるとは思わない。 – bernie

答えて

6

ラベルは目盛りの位置の中央に配置されます。それらの境界ボックスは幅が不等であり、重複する可能性もあり、不均等な間隔で表示されます。

enter image description here

あなたはいつもの間隔を変えることは本当にオプションではありません、ticklabelsが彼らの目盛りにリンクしたいと思いますので。

ただし、右上隅が目盛りの下の位置の基準となるように調整したい場合があります。

はそのためhorizontalalignmentまたはha引数を使用して"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

関連する問題