gpt4 book ai didi

python - matplotlib 中的中心多线图例

转载 作者:行者123 更新时间:2023-12-01 02:23:00 25 4
gpt4 key购买 nike

enter image description here我有一个包含 4 个项目的图例。我把它们分成两行两列。每个图例条目的标签长度​​差异很大。如何使图例的每一行居中?目前我正在使用:

plt.legend(legend,labels,bbox_to_anchor=(-0.0, 1.22, 1.0, 0), mode="expand", scatterpoints=1)

从图中,您可以看到图例的行是对齐的,因此符号位于彼此的顶部。如何使行居中以使每行都在图形 x 轴上居中?

最佳答案

图例是基于列的;每列的宽度由最长的标签决定。我猜想可以重写图例代码,使其基于行并删除其中 HPacker 的使用。但我不确定这是否值得付出努力。或者,您可以创建多个图例,每一行一个图例,并将它们放置在彼此的顶部;在没有图例框架的情况下使用 (frameon=False)。

要创建两个图例,您需要在创建第二个图例后手动将第一个图例添加到坐标区。图例的位置例如是 loc="lower center", bbox_to_anchor=(0.5, yi),其中 yi 是垂直位置,对于这里的简单情况可以通过反复试验找到。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(3)

markers = ["o","s","d","^"]
labels = ["Total", "Very very very long label", "Component 1", "Component 3"]
fig, ax = plt.subplots()

for i in range(4):
ax.plot(x,i*(x+1), marker=markers[i], label=labels[i])

h, l = ax.get_legend_handles_labels()
kw = dict(ncol=2, loc="lower center", frameon=False)
leg1 = ax.legend(h[:2],l[:2], bbox_to_anchor=[0.5,1.08],**kw)
leg2 = ax.legend(h[2:],l[2:], bbox_to_anchor=[0.5,1.00],**kw)
ax.add_artist(leg1)

fig.subplots_adjust(top=0.8)

plt.show()

enter image description here

关于python - matplotlib 中的中心多线图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47760805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com