2017-07-02 107 views
1

我目前的情節有一個對齊問題。 下面是我的陰謀 enter image description here如何在matplotlib中對齊註記文字和圖例?

我想是齊齊的註釋文字和圖例如下圖所示 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