2017-07-02 18 views
1

現在の私のプロットでは、位置合わせに1つの問題があります。以下 は enter image description herematplotlibで注釈のテキストと凡例を整列する方法は?

以下のように私は何をしたいが整列注釈テキストと凡例を揃えることで、私のプロット enter image description here

でこれを実現する方法はありますか?

以下は私のプロットコードです。

from pylab import * 
import re 
matplotlib.rc('xtick', labelsize=16) 
matplotlib.rc('ytick', labelsize=16) 
plt.rcParams['font.size'] = 16 
plt.rcParams['axes.labelsize'] = 16 
plt.rcParams['xtick.labelsize'] = 16 
plt.rcParams['ytick.labelsize'] = 16 
plt.rcParams['legend.fontsize'] = 16 
rc('font',family='Arial') 


fig, ax = plt.subplots(figsize=(5,4)) 
x = array([2.2,4.4]) 
a = array([1,2]) 
b = array([1,2]) 
c = array([1,2]) 
total_width, n = 1, 3 
width = total_width/n 
x = x - width*1.5 



xmarks=[2.2,4.4] 

plt.xticks(xmarks) 
xx=plt.bar(x, a, width=width, color='r',alpha=0.5,label='0%') 
xy=plt.bar(x + width, b, width=width, color='b',alpha=0.5,label='60%') 
xz=plt.bar(x + 2 * width, c, width=width,color='g', alpha=0.5,label='100%') 

extra = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0) 
leg=ax.legend([extra, xx, xy,xz], ("IOTs replacement\nwith FAC", "0%", "60%",'100%'),loc='upper left') 

leg.get_frame().set_alpha(0.0) 
plt.show() 

答えて

1

このためtitle引数使用することをお勧め:

:あなたは伝説の位置やタイトルのいくつかの手動調整を行う必要があるように見えます

leg = ax.legend([xx, xy,xz], 
       ("0%", "60%",'100%'), 
       title="IOTs replacement\nwith FAC", 
       loc='upper left') 

enter image description here

leg = ax.legend([xx, xy,xz], 
       ("0%", "60%",'100%'), 
       title="IOTs replacement\nwith FAC", 
       loc=(-0.035, 0.48)) 
leg.get_title().set_position((18, 0)) 

enter image description here

+0

これは凡例とY軸との間の空白があることを除いて、良好な改善です。つまり、厳密に言えば、左上には実際にはありません。 – user3737702

+0

私の答えを更新しました。 –

+0

おっと、これはまさに私が欲しいものです、素晴らしい! – user3737702

1

凡例には、title引数で指定するタイトルを付けることができます。凡例と軸の境界線の間のスペースは、パラメータborderaxespadによってゼロに設定できます。伝説自体left aligned in the legend boxを持っているために

、あなたは伝説の_legend_box.align「左」に設定することがあります。

leg=ax.legend([xx, xy,xz], ("0%", "60%",'100%'), 
       loc='upper left', 
       title = "IOTs replacement\nwith FAC", 
       borderaxespad=0) 

leg.get_frame().set_alpha(0.0) 
leg._legend_box.align = "left" 

enter image description here

+0

これは素晴らしい〜私は答えとして一つだけ選ぶことができます申し訳ありません、両方の答えはかなり良いです... – user3737702

関連する問題