2017-04-25 22 views
1

回転ソリューションhereおよび/またはhereは、すべて同じ長さのラベルに対してうまく機能します。しかし、位置はラベルの中央に基づいているように見えるので、ラベル名の長さが不均一な場合、間隔はオフになります。matplotlibおよび/またはseabornでの回転軸ラベルの均等間隔

次のコードは、不均一な間隔の外観になります。

frame = pd.DataFrame(np.random.random((10, 4)), columns=[ 
    'Medium Name', 'Really Really Long Name', 'Name', 
    'Ridiculously Good Looking and Long Name' 
]) 
ax = sns.barplot(data=frame) 
plt.xticks(rotation=45) 

私はthis questionに類似の間隔を調整しようとしたが、それはそれは右見て取得するには迷惑な手動当て推量プロセスです。 ax.axes.set_xticks([-0.2,0.6,2,2.3])行を追加すると、適切な間隔(列の中央の文字列の終わり)がおおよそ作成されますが、中央ではなくラベルの最後に基づいて自動的に配置する方法がありますか?あるいは、すべてのラベルが同じ長さになるように文字列をラップするのでしょうか?

編集: も、合理的な長さのラベルに何が起こるか表示するには:

cols = ['Tag' + str(i) for i in range(8)] 
cols[2] = 'Not Crazy Long' 
cols[4] = 'Also Not Too Bad' 
frame = pd.DataFrame(np.random.random((10, 8)), columns=cols) 
ax = sns.barplot(data=frame) 
plt.xticks(rotation=35) 

Result here

私は、テキストの折り返しソリューションを好きですが、@mwaskomが指摘したように、私は私が本当にしたいと思います(テキストラップを使用していても)ラベルの「右横方向の位置合わせ」。これは可能ですか?あなたは、列の平均長さを取得し、あなたのラッピング値としてそれを使用できtextwrapを使用したい場合は

+0

問題がない間隔があるということです不均等であるが、水平に位置合わせされたレベルを有する。私はあなたが右の水平方向の整列を望んでいると思います。長いラベルが付いたバープロットの場合は、水平のバーを描く方が良い場合があります。アラインメントが正しい場合でも、長いラベルを読むために頭を傾けなければならないからです。 – mwaskom

+0

PPSこれは「海中の」質問ではありません。目盛りラベルの向きや位置合わせを指定する時点では、matplotlibに関する質問であり、海底で作ったプロットは無関係です。 – mwaskom

+0

@mwaskomに感謝します。私は、水平のバープロットとシーボーンの質問についてあなたのポイントを見ています - それは海底でそれを行う方法であることを望んでいましたが、それはmatplotlibを直接扱うよりもずっとうれしいからです:) – elphz

答えて

0

import numpy as np, seaborn as sns 
import textwrap 

columns=['Medium Name', 'Really Really Long Name', 'Name', 
     'Ridiculously Good Looking and Long Name'] 
mean_length = np.mean([len(i) for i in columns]) 
columns = ["\n".join(textwrap.wrap(i,mean_length)) for i in columns] 
frame = pd.DataFrame(np.random.random((10, 4)), columns=columns) 
ax = sns.barplot(data=frame) 
ax.set_xticklabels(ax.get_xticklabels(),rotation=45,ha="right",rotation_mode='anchor') 
plt.tight_layout() 
plt.show() 

結果: enter image description here

+1

ありがとうございます - 'ax.set_xticklabels(ax。get_xticklabels()、rotation = 45、ha = "right") '私のラベルは今完璧です! – elphz

+0

大歓迎です! – bernie

+1

@elz'rotation_mode = 'anchor'を追加することをお勧めします。 –

関連する問題