2011-10-29 26 views
12

matplotlib軸の凡例のエントリを右揃えしようとしていますが(デフォルトでは左揃えになっています)、これを行う方法が見つかっていないようです。私が持っている設定は以下の通りです:Matplotlibの凡例のテキストの整列

ax = my_fig.get_axes()[0] 
legend_font = FontProperties(size=10) 
ax.legend(prop=legend_font, num_points=1, markerscale=0.5) 

matplotlib Axesためのドキュメントで伝説のキーワード引数のリストがあります(私は()コマンドax.plotを使用して軸をmy_figするデータとラベルを追加しています)しかし、そこに凡例の項目の配置を設定するためのストレートな方法はないようです。誰でもこれを行うバックドアの方法を知っていますか?ありがとう。

EDIT:

は私が達成しようとしているものを明確にするために、今の私の伝説は次のようになります。

Maneuver: 12-OCT-2011 12:00 UTC 

    Bias: 14-OCT-2011 06:00 UTC 

Maneuver: 12-OCT-2011 12:00 UTC 

Bias: 14-OCT-2011 06:00 UTC 

が、私はそれが見えるようにしたいです

+1

ラベルテキストに複数行が含まれていますか?もしそうなら、label_text.set_multialignment( 'right')を使うことができます –

+0

私はあなたが何を意味しているのか分かりません。ラベルについては、簡単な説明と日付があります。だから今、伝説には、左に説明が積み重ねられ、整列されています。私は、すべての日付を積み重ねる(右に並べる)ことを望みます。私は主なメッセージをイラストで編集しました。 – jeremiahbuddha

+0

回避策として、スペースで埋め込むことができます(モノスペースフォントを使用している場合) –

答えて

15

あなたが探しているバックドアは、次のとおりです。

# get the width of your widest label, since every label will need 
# to shift by this amount after we align to the right 
shift = max([t.get_window_extent().width for t in legend.get_texts()]) 
for t in legend.get_texts(): 
    t.set_ha('right') # ha is alias for horizontalalignment 
    t.set_position((shift,0)) 
+2

シャウトアウト!今年PyConのIPythonスプリントで会ったのは、あなたがポールであることに気がつきました。私は最終的に、この答えをコーディングするつもりです、ありがとう! – jeremiahbuddha

8

私は実際の作業をしようとしましたが、できませんでした。

少なくともmatplotlibバージョン1.1.1(多分それ以前)以降、私たちは専用のレンダラーインスタンスが必要です。 レンダラを定義するバックエンドを世話してください。バックエンドによっては、出力が画面上でうまく見えるかもしれませんが、PDFとしては暗いです。

# get the width of your widest label, since every label will need 
#to shift by this amount after we align to the right 
renderer = figure.canvas.get_renderer() 
shift = max([t.get_window_extent(renderer).width for t in legend.get_texts()]) 
for t in legend.get_texts(): 
    t.set_ha('right') # ha is alias for horizontalalignment 
    t.set_position((shift,0)) 
関連する問題