Python легенда matplolib, как уменьшить расстояние между левым краем рамки и маркерами - PullRequest
1 голос
/ 22 февраля 2020

Как показывает вопрос, я пытаюсь уменьшить расстояние между левым краем рамки легенды и маркерами. enter image description here

На рисунке показан текущий график. Я хотел бы найти способ:

1) сохранить frameon = True, чтобы частично замаскировать нижележащие точки;

2) переместить маркеры и метки влево, уменьшив расстояние между легендами край и маркеры

фактическая конфигурация легенды следующая:

leg = ax.legend(handles=legend_elements, 
      fontsize=13, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=-0.6, 
      labelspacing=0.08, borderpad=0)

РЕДАКТИРОВАТЬ: Решение Спасибо за самые быстрые ответы, решение объединяло оба ваших предложения:

leg = ax.legend(handles=legend_elements, 
      fontsize=13, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=0., 
      labelspacing=0.08, borderpad=0.,
      handlelength=1.2, borderaxespad=1)

Я выбрал ответ Синан Курмус как лучший, чтобы поддержать его ранг

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Попробуйте использовать отрицательное значение для borderpad. Это, вероятно, приведет к тому, что легенда также будет перемещаться вниз, поэтому настройте ее с помощью borderaxespad.

Примерно так:

leg = ax.legend( 
      fontsize=13, loc="lower left", frameon=True, 
      framealpha=1, handletextpad=-0.6, 
      labelspacing=0.08, borderpad=-0.5, borderaxespad=1)

Обратите внимание, что вместо абсолютного местоположения я использовал "lower left" за расположение легенды. В противном случае весь «ход вещей с borderpad и borderaxspread» становится шатким (не очень точное объяснение, я знаю :).

1 голос
/ 22 февраля 2020

Вы можете попробовать добавить следующий параметр и изменить значение по вашему выбору

handlelength=1

Пример

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 3))
np.random.seed(10)

# WITHOUT handlelength
ax1.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'bo', label='data1')
ax1.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'rs', label='data2')
leg = ax1.legend(fontsize=19, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=0.5, 
      labelspacing=0.08, borderpad=0.0)


# WITH handlelength
ax2.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'bo', label='data1')
ax2.plot(np.random.randint(0, 10, 5), np.random.randint(0, 10, 5), 'rs', label='data2')
leg = ax2.legend(fontsize=19, loc=(0.03, 0.01), frameon=True, 
      framealpha=0.5, handletextpad=0.5, 
      labelspacing=0.08, borderpad=0.0, handlelength=1)

enter image description here

...