Как изменить расположение символов / текста в поле легенды? - PullRequest
0 голосов
/ 15 марта 2019

У меня есть сюжет с одной записью легенды. Я помещаю легенду внизу рисунка и использую 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)

Этот код выдает this image. Как изменить положение символа и текста таким образом, чтобы они находились по центру в поле легенды?

PS: я знаю, что экспонента - это плохая метка для этого подзаговора, поскольку она описывает только первую подфигуру. Но это только для примера, чтобы я мог применить его к своему фактическому сценарию использования.

1 Ответ

1 голос
/ 15 марта 2019

Записи легенды размещаются с использованием объекта HPacker.Это не позволяет быть центрированным.Поведение таково, что эти HPackers «выровнены» (аналогично опции «оправдать» в обычном программном обеспечении для обработки текстов).

Обходным решением будет создание трех (или любого нечетного числа) записей легенды, напримерчто желаемая запись находится посередине.Это может быть выполнено с помощью аргумента 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()

enter image description here

...