我有4个项目的传奇。我把它们分成两行两列。每个图例条目的标签长度差异很大。如何将图例的每一行居中?目前我正在使用:
plt.legend(legend,labels,bbox_to_anchor=(-0.0, 1.22, 1.0, 0), mode="expand", scatterpoints=1)
从图中可以看出,图例的行是对齐的,因此符号在彼此的顶部。如何使行居中以使每行在图x轴上居中?
答案 0 :(得分:2)
图例是基于列的;每列的宽度由最长的标签决定。我猜想有可能重写传奇代码,使其基于行并切断使用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()