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"
作为图例位置,而不是绝对位置。否则整个“用borderpad
和borderaxspread
移动东西”会变得很奇怪(我知道这不是一个非常精确的解释:)。
【讨论】:
【参考方案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.pyplot 图例标记更改为 1、2、3 之类的序列号,而不是形状或字符?