Для управления надписью внутри легенды (эффективно создавая легендарную коробку больше) используйте borderpad
kwarg.
Например, вот по умолчанию:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left')
plt.show()
Если мы изменяем внутри прокладки с borderpad=2
, мы сделаем общий ящик легенда больше (единицы являются кратными размер шрифта, аналогичный em
):
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', borderpad=2)
plt.show()
В качестве альтернативы, вы можете изменить расстояние между элементами. Используйте labelspacing
для управления этим:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', labelspacing=2)
plt.show()
В большинстве случаев, однако, это имеет наибольший смысл регулировать как labelspacing
и borderpad
в то же время:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', borderpad=1.5, labelspacing=1.5)
plt.show()
С другой стороны, если у вас очень большие маркеры, вы можете увеличить длину линии, показанной в легенде. Например, по умолчанию может выглядеть примерно так:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 5)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, marker='o', markersize=20,
label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left')
plt.show()
Если мы изменим handlelength
, мы получим более длинные строки в легенде, которая выглядит немного более реалистичным. (Я также настраиваю borderpad
и labelspacing
здесь, чтобы дать больше места.)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 5)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, marker='o', markersize=20,
label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', handlelength=5, borderpad=1.2, labelspacing=1.2)
plt.show()
Из документов, вот некоторые из других параметров, которые вы можете изучить:
Padding and spacing between various elements use following
keywords parameters. These values are measure in font-size
units. E.g., a fontsize of 10 points and a handlelength=5
implies a handlelength of 50 points. Values from rcParams
will be used if None.
=====================================================================
Keyword | Description
=====================================================================
borderpad the fractional whitespace inside the legend border
labelspacing the vertical space between the legend entries
handlelength the length of the legend handles
handletextpad the pad between the legend handle and text
borderaxespad the pad between the axes and legend border
columnspacing the spacing between columns
Это так здорово! Он даже решает некоторые мои вопросы, которые я не задавал! Огромное спасибо. Опять же, это определенно должно быть добавлено в matplotlib docs! Шляпы от тебя, сэр! –
@ perfectionm1ng - Рад помочь! Возможно, вы также захотите взглянуть на «markerscale» kwarg. Поскольку высота усов ошибок в легенде контролируется высотой текста, много раз вы хотите сжимать «точку» в легенде, чтобы сделать провалы с ошибками более очевидными. К сожалению, я не думаю, что есть простой способ сказать «сделать ошибки в легенде вдвое большей», не изменяя другие вещи (например, размер шрифта). «markerscale» - разумное решение проблемы. –