Python matplolib图例如何减少帧左边缘和标记之间的距离

2024-09-28 22:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

正如问题所暗示的,我正试图缩小图例框架左边缘和标记之间的距离enter image description here

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

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)

我选择了锡南·库姆斯的答案作为支持他的最佳答案


Tags: 标记true距离elementsaxlochandles边缘
2条回答

尝试对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移动东西”就会变得不可靠(我知道这不是一个非常精确的解释:)

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

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)

enter image description here

相关问题 更多 >