【问题标题】:Fix size of legend in matplotlib修复 matplotlib 中图例的大小
【发布时间】:2016-12-07 19:50:09
【问题描述】:

我正在尝试使用 matplotlib 制作自动绘图,将几个不同的特征绘制在另一个之上(背景是填充的等高线图,上一层是 pcolormesh)。我试图绘制的最重要的特征是几个散点图,带有不同的标签和图标。

我正在尝试为该图添加图例,目前使用以下命令:

leg = ax.legend(legplots,
           legnames,
           scatterpoints=1,
           loc='upper center',
           ncol=3,
           fontsize=14,
         bbox_to_anchor=(0.5, -0.14),
          fancybox=True, shadow=True)

假设 ax 是主轴,而 legplots 和 legnames 分别是散点图及其相应标签的列表。

添加图例可以正常工作,但是随着我拥有的腿部图数量(及其名称长度)的变化,当您为图设置动画时,图例的大小会增大和缩小。如何控制图例框的大小和图例内的列宽?这可能吗?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    目前您的边界框的大小为 0,因为您只指定了它的位置 ((0.5, -0.14))。

    您可以将图例的边界框设置为大于 0 并且也足够大,以使其能够容纳最大数量的元素所需的最大尺寸。我认为您需要通过以下方式找到该尺寸反复试验。

    所以使用完整的 4 元组表示法

    bbox_to_anchor=(x0, y0, width, height)
    

    结合适当的loc 参数和关键字参数mode="expand" 将允许您使图例足够大以满足您的需要。有关 4 元组表示法的更详细说明,请参阅 this post 并查看 legend location guide。

    【讨论】:

    • 所以这行得通……有点。图例框保持固定宽度,但现在覆盖两个标题似乎有问题。例如:i.imgur.com/RYemFRs.png
    • 这确实很奇怪。我看不出这与设置图例的边界框有什么关系。我猜这个问题与代码的其余部分有关,为了解决它,需要创建一个minimal reproducible example。
    • 这种解决方案的缺点是需要提供图例相对于轴宽度的宽度。能够以绝对值指定图例的宽度会很有帮助。
    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2018-07-24
    • 2018-03-30
    • 2021-12-06
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多