如何使用 mode='expand' 并在仅给定一个标签条目的情况下将图例标签居中?

How to use mode='expand' and center a figure-legend label given only one label entry?

我想为子图生成居中图例,其中有一个标签。对于我的实际用例,子图的数量大于或等于一个;可以有一个 2x2 的子图网格,我想使用图形图例而不是使用 ax.legend(...),因为相同的单个标签条目将应用于 each/every 子图。

作为一个简短的简化示例,请考虑下面的代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y, color='orange', label='$f(x) = sin(x)$')
fig.subplots_adjust(bottom=0.15)
fig.legend(mode='expand', loc='lower center')
plt.show()
plt.close(fig)

此代码将生成下图:

我想使用 mode='expand' kwarg 使图例跨越子图的整个宽度;但是,这样做会阻止标签居中。例如,从代码中删除这个 kwarg 会输出下图。

有没有办法既使用 mode='expand' 又让标签居中(因为只有一个标签)?

编辑:

我试过使用 bbox_to_anchor kwargs(如 docs 中所建议)作为 mode='expand' 的替代方法,但这也不起作用。可以将 fig.legend(...) 行切换为下面的行以供自己测试。

fig.legend(loc='lower center', bbox_to_anchor=(0, 0, 1, 0.5))

手柄和标签与图例的左侧齐平。没有允许对齐它们的机制。
一种解决方法是使用 3 列图例句柄并用透明句柄填充第一列和第三列。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = np.sin(x)

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.15)

line, = ax.plot(x, y, color='orange', label='$f(x) = sin(x)$')

proxy = plt.Rectangle((0,0),1,1, alpha=0)
fig.legend(handles=[proxy, line, proxy], mode='expand', loc='lower center', ncol=3)
plt.show()