我有以下代码来生成带有共享图例的绘图
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)})
但是,这样做会使图例线有点太短,无法清楚区分实线和虚线,因此我试图找出如何在不使整个图例变大的情况下使它们变长
从这里的文档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)
但事实证明,这并不能让我像我想的那样改变线条的长度。因此,我改变了问题,寻求更多关于如何实现这一目标的一般性帮助
抱歉这么吵,原来答案很简单,我在这篇文章How to adjust the size of matplotlib legend box?和Matplotlib: Horizontal Linelength in Legend上找到了。只需要使用
handlelength
关键字。抱歉,我在找问题的时候没有正确的措辞。将此标记为重复相关问题 更多 >
编程相关推荐