在Matplotlib中,当图例字体大小更改后,如何更新图例标签间距?

11

我正在编写一个脚本,其中包含多种格式样式,其中包括图例文本的字体大小。

在rcparams或matplotlibrc文件中,legend.labelspacing指定标签间距为字体大小的分数,因此如果更改字体大小,则可能会预期实际空间距离也会随之更改。但是,由于实际间距可能是在创建图例时计算的,因此对现有图例文本对象的字体大小进行任何后续更改都不会影响标签间距。是否有方法可以在更改现有图例标签对象的字体大小后更新图例标签间距?总之,这就是我想做的:

  1. 绘制带有图例的图形
  2. 保存该图(根据rcparams或matplotlibrc文件格式)
  3. 更改几个格式属性(线宽、字体大小等)
  4. 再次以更新的格式属性保存该图,包括重新调整的图例标签间距

是否有方法可以在不更改rcparams并重建图形的情况下完成这项工作?

1个回答

13

只需在调用legend()时添加labelspacing参数即可,这是一个示例:

import pylab as pl

pl.plot([0,1],[0,1], label="a")
pl.plot([0,2],[0,2], label="b")

pl.legend()
pl.savefig("p1.png")
pl.legend(labelspacing=2)
pl.savefig("p2.png")

重新使用参数:

import pylab as pl

pl.plot([0,1],[0,1], label="a")
pl.plot([0,2],[0,2], label="b")
params = dict(loc="right", prop=dict(size=9))
pl.legend(**params)
pl.savefig("p1.png")
params["labelspacing"] = 2
pl.legend(**params)
pl.savefig("p2.png")

不幸的是,这样做不起作用,因为它会重置图例位置和标签字体大小。 - mrclary
这只是一个示例,展示了如何更改标签间距。您应该通过legend()的其他参数设置图例位置和字体大小。 - HYRY
是的,我明白。但是,图例已经创建了,使用legend()需要重新建立所有参数,而我不一定想改变这些参数。 - mrclary
你可以将所有参数保存在一个字典params中,并调用legend(**params)。我通过使用这种方法更新了答案。 - HYRY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接