Python matplotlib图例如何减少框架左边缘和标记之间的距离

Posted

技术标签:

【中文标题】Python matplotlib图例如何减少框架左边缘和标记之间的距离【英文标题】:Python matplolib legend how to reduce distance between frame left edge and markers 【发布时间】:2020-06-06 16:27:02 【问题描述】:

正如问题所暗示的,我正在尝试减少图例框架的左边缘与标记之间的距离。

图中是当前的情节。我想找到一种方法:

1) 保留frameon = True 以部分掩盖底层点;

2) 向左移动标记和标签,减少图例边缘和标记之间的距离

实际图例配置如下:

leg = ax.legend(handles=legend_elements, 
      fontsize=13, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=-0.6, 
      labelspacing=0.08, borderpad=0)

编辑:解决方案 感谢两位提供最快的答案,解决方案结合了您的两个建议:

leg = ax.legend(handles=legend_elements, 
      fontsize=13, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=0., 
      labelspacing=0.08, borderpad=0.,
      handlelength=1.2, borderaxespad=1)

我选择了 Sinan Kurmus 的回答来支持他的排名

【问题讨论】:

【参考方案1】:

尝试为borderpad 使用负值。这也可能导致图例向下移动,因此请使用borderaxespad 进行调整。

类似这样的:

leg = ax.legend( 
      fontsize=13, loc="lower left", frameon=True, 
      framealpha=1, handletextpad=-0.6, 
      labelspacing=0.08, borderpad=-0.5, borderaxespad=1)

请注意,我使用"lower left" 作为图例位置,而不是绝对位置。否则整个“用borderpadborderaxspread 移动东西”会变得很奇怪(我知道这不是一个非常精确的解释:)。

【讨论】:

【参考方案2】:

您可以尝试添加以下参数并根据您的选择更改值

handlelength=1

示例

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 3))
np.random.seed(10)

# WITHOUT handlelength
ax1.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'bo', label='data1')
ax1.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'rs', label='data2')
leg = ax1.legend(fontsize=19, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=0.5, 
      labelspacing=0.08, borderpad=0.0)


# WITH handlelength
ax2.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'bo', label='data1')
ax2.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'rs', label='data2')
leg = ax2.legend(fontsize=19, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=0.5, 
      labelspacing=0.08, borderpad=0.0, handlelength=1)

【讨论】:

以上是关于Python matplotlib图例如何减少框架左边缘和标记之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 matplotlib 在 Python 中创建图例

如何在 Python matplotlib 子图中显示图例

如何将 python matplotlib.pyplot 图例标记更改为 1、2、3 之类的序列号,而不是形状或字符?

matplotlib 自定义图例中类别的副标题

Python可视化(matplotlib)图像自定义图例(Legend)

4.11Python数据处理篇之Matplotlib系列---图例,网格,背景的设置