2017-07-02 67 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