Интервал между текстами в matplotlib legend () без изменения шрифта на моноширинный - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь сделать так, чтобы надписи для легенды имели такое же выравнивание, как и с функцией print. Я нашел этот ответ и другие, которые используют leged(prop={'family':'monospace'}: Выравнивание текста с использованием формата в легенде matplotlib

Метки были созданы с использованием метода формата: label='{:<8}{:<8}'.format(iso, 'n='+str(isotope_dict[iso]))

Однако, хотя выравнивание теперь работает, шрифт изменяется, что не очень хорошо выглядит для нескольких фигур рядом:

С legend()

With legend()

С legend(prop={'family': 'monospace'})

enter image description here

Итак, возможно ли получить желаемое выравнивание, но с тем же значением по умолчанию шрифт, используемый legend()?

1 Ответ

2 голосов
/ 03 апреля 2020

У меня есть немного хакерский ответ для вас, но он работает. plt.legend() имеет параметр ncol, который позволяет разделить записи легенды на несколько столбцов. Нарисовав группу невидимых линий с невидимыми маркерами, мы можем добавить метки к легенде и поместить их в следующий столбец.

Вот код:

import matplotlib.pyplot as plt

# Plot actual data
plt.plot([0, 1], [0, 1])
plt.plot([0, 1], [0, 1.1])
plt.plot([0, 1], [0, 1.2])
plt.plot([0, 1], [0, 1.3])
plt.plot([0, 1], [0, 1.4])

# Plot non-visible lines
plt.plot(np.nan, np.nan, '.', ms=0)
plt.plot(np.nan, np.nan, '.', ms=0)
plt.plot(np.nan, np.nan, '.', ms=0)
plt.plot(np.nan, np.nan, '.', ms=0)
plt.plot(np.nan, np.nan, '.', ms=0)

plt.legend(['Line 1', 'Line 2', 'Line 3', 'Line 4', 'Line 5',
            'Col Text 1', 'Col Text 2', 'Col Text 3', 'Col Text 4',
            'Col Text 5'], ncol=2, columnspacing=-1)
plt.show()

И это приводит к следующему графику:

plot with multiple columns in the legend

Регулируя параметр columnspacing, вы можете переместить этот второй столбец ближе или дальше к первому. Опять же, это немного взломать. Я не удивлюсь, если есть лучший способ сделать это.

Ссылки:

EDIT: Это работает, даже если метки линий не имеют одинаковую длину. Должен ли мой пример показать, что ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...