如何更改图例框中 symbols/text 的位置?

How to change the location of the symbols/text within a legend box?

我有一个只有一个图例条目的子图。我将图例放在图的底部并使用 mode='expand';但是,单个图例条目位于图例框的最左侧。据我了解,更改 bbox_to_anchor 等 kwargs 会更改图例框参数,但不会更改 symbols/text 中的参数。下面是重现我的问题的示例。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 21)
y = np.exp(x)
z = x **2

fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y, color='r', label='exponential')
axes[1].plot(x, z, color='b')
# handles, labels = axes[0].get_legend_handles_labels()
plt.subplots_adjust(bottom=0.125)
fig.legend(mode='expand', loc='lower center')
plt.show()
plt.close(fig)

此代码生成 。如何更改符号和文本的位置,使它们在图例框中居中?

PS:我知道指数对于这个子图来说是一个错误的标签,因为它只描述了第一个子图。但是,这只是为了示例,以便我可以将其应用到我的实际用例中。

图例条目使用 HPacker 对象放置。这不允许居中。行为是那些 HPackers "justified"(类似于普通文字处理软件中的 "justify" 选项)。

解决方法是创建三个(或任何奇数个)图例条目,以便所需的条目位于中间。这将通过 ncol 参数和使用 "dummy" 条目(可能是透明的并且没有关联的标签)来完成。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 21)
y = np.exp(x)
z = x **2

fig, axes = plt.subplots(nrows=1, ncols=2)
fig.subplots_adjust(bottom=0.125)

l1, = axes[0].plot(x, y, color='r', label='exponential')
axes[1].plot(x, z, color='b')


dummy = plt.Line2D([],[], alpha=0)
fig.legend(handles=[dummy, l1, dummy],
           mode='expand', loc='lower center', ncol=3)
plt.show()