Matplotlib更改图例线的长度

2024-06-16 14:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,2,5], 'r-')
greenLine, = p1.plot([1,2,3], [8,9,1], 'g--')

redDot, = p2.plot([1,2,3], [4,2,5], 'ro')
greenDot, = p2.plot([1,2,3], [8,9,1], '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,2,3))

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

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

编辑: 评论中提到,要让sketch_params正常工作,我可以简单地

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

但事实证明,这并不能让我像我想的那样改变线条的长度。因此,我改变了问题,寻求更多关于如何实现这一目标的一般性帮助


Tags: addptplotmatplotlibfigparamshandlerlines