Matplotlib 更改图例线的长度

问题描述

我有以下代码生成带有共享图例的图

from matplotlib.legend_handler import HandlerLine2D,HandlerTuple
import matplotlib.pyplot as pt

fig = pt.figure(figsize = (12,4))
gd = fig.add_gridspec(1,2)
p1 = fig.add_subplot(gd[0])
p2 = fig.add_subplot(gd[1])

redLine,= p1.plot([1,2,3],[4,5],'r-')
greenLine,[8,9,1],'g--')

redDot,= p2.plot([1,'ro')
greenDot,'gs')

leg = p2.legend([(redLine,redDot),(greenLine,greenDot)],['Red','Green'],handler_map = {tuple: HandlerTuple(ndivide=None)})

enter image description here

然而,这样做会使图例线有点太短,无法清楚地区分实线和虚线,所以我试图弄清楚如何在不扩大整个图例的情况下使它们更长。

从这里的文档 https://matplotlib.org/stable/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D 来看,我似乎应该可以通过设置 Sketch_params 属性来做到这一点。我有以下

legLines = leg.get_lines()
pt.setp(legLines,sketch_params = (1,3))

但这告诉我它必须是实数,而不是元组——与文档建议的相反。还要注意这个例子中的数字是任意的,因为我只是想了解如何使用它。

我尝试了很多不同的方法来实现这个共享的传奇,这是迄今为止我得到的最接近的。所以我只是希望有人能帮助解释我如何滥用 sketch_params 属性,因为听起来我应该能够用它指定长度。

编辑:评论中提到要让 Sketch_params 工作,我可以简单地做

for line in legLines:
    line.set_sketch_params(1,3)

但事实证明,这实际上并没有让我像我想要的那样改变线条的长度。因此,我更改了问题,以获得有关如何实现这一目标的更多一般帮助。

解决方法

抱歉打扰了,原来答案很简单,我在这篇文章 How to adjust the size of matplotlib legend box?Matplotlib: Horizontal Linelength in Legend 上找到了它。只需要使用 handlelength 关键字。抱歉,我在寻找问题时没有正确表述问题。将此标记为重复。