首页 > 解决方案 > 如何更改图例框中符号/文本的位置?

问题描述

我有一个带有单个图例条目的子图。我将图例放在图的底部并使用mode='expand';但是,单个图例条目放置在图例框的最左侧。据我了解,更改 kwargs 例如bbox_to_anchor更改图例框参数,但不会更改其中的符号/文本的参数。以下是重现我的问题的示例。

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:我知道指数对于这个子图来说是一个不好的标签,因为它只描述了第一个子图。但是,这只是为了示例,以便我可以将其应用于我的实际用例。

标签: python-3.xmatplotliblegendsubplotlegend-properties

解决方案


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

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

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()

在此处输入图像描述


推荐阅读