Beb*_*ron 2 python matplotlib legend legend-properties
我有以下代码来生成具有共享图例的图
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)})
Run Code Online (Sandbox Code Playgroud)
然而,这样做会使图例线有点太短,无法清楚地区分实线和虚线,因此我试图找出如何在不使整个图例变大的情况下使它们更长。
从这里的文档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))
Run Code Online (Sandbox Code Playgroud)
但这告诉我它必须是实数,而不是元组——与文档的建议相反。另请注意,此示例中的数字是任意的,因为我只是想了解如何使用它。
我尝试了很多不同的方法来实现这个共同的传说,这是迄今为止我所得到的最接近的。所以我只是希望有人能帮助解释我如何滥用该sketch_params属性,因为听起来我应该能够用它来指定长度。
编辑: 评论中提到,要让 sketch_params 工作,我可以简单地做
for line in legLines:
line.set_sketch_params(1,2,3)
Run Code Online (Sandbox Code Playgroud)
但事实证明,这实际上并没有让我像我想要的那样改变线条的长度。因此,我改变了问题,以获得有关如何实现这一目标的更一般的帮助。
抱歉打扰了,事实证明答案很简单,我在这篇文章How to adjustment the size of matplotlib legend box?中找到了它。和Matplotlib:图例中的水平线长度。只需要使用handlelength关键字即可。抱歉,我在寻找问题时没有正确表述问题。将其标记为重复。
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |