我有一个带有单个图例条目的子图。我将图例放在图的底部,并使用mode='expand'
;但是,单个图例条目位于图例框的最左侧。据我了解,更改bbox_to_anchor
之类的kwarg会更改图例框参数,但不会更改其中的符号/文本的参数。下面是重现我的问题的示例。
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:我知道指数对此子图不利,因为它仅描述第一个子图。但是,这只是示例性的缘故,以便我可以将其应用于我的实际用例。
答案 0 :(得分:1)
图例条目使用HPacker
对象放置。这不允许居中。行为是那些HPackers是“合理的”(类似于普通文字处理软件中的“ justify”选项)。
一种解决方法是创建三个(或任意奇数个)图例条目,以使所需的条目位于中间。这可以通过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()