可以将handleheight关键字参数设置为一个足够大的数字,使句柄的高度大于字体占用的空间。这会使文本看起来对齐。这样做可能需要将labelspacing设置为一个小数字,以免使图例显得太大。plt.legend(fontsize='xx-large', ncol=2,handleheight=2.4, labelspacing=0.05)
如图所示,这种方法的缺点是行相对于文本的基线向上移动。这可能取决于使用情况,如果这是可以接受的或不。
如果不是这样的话,我们需要更深入地挖掘。下面的子类HandlerLine2D(这是行的处理程序),以便为行设置稍微不同的位置。根据图例的总大小、字体大小等,需要调整SymHandler类中的数字xx。from matplotlib.legend_handler import HandlerLine2D
import matplotlib.lines
class SymHandler(HandlerLine2D):
def create_artists(self, legend, orig_handle,xdescent, ydescent, width, height, fontsize, trans):
xx= 0.6*height
return super(SymHandler, self).create_artists(legend, orig_handle,xdescent, xx, width, height, fontsize, trans)
leg = plt.legend(handler_map={matplotlib.lines.Line2D: SymHandler()},
fontsize='xx-large', ncol=2,handleheight=2.4, labelspacing=0.05)