Jak dostosować rozmiar matplotlib legend box?

Mam Wykres, którego lewy górny róg jest całkiem pusty. Więc postanowiłem umieścić tam moje pudełko z legendami.

Wydaje mi się jednak, że przedmioty w legendzie są bardzo małe, a samo pudełko legendy jest również dość małe .

Przez "małe" mam na myśli coś takiego

Tutaj wpisz opis obrazka

Jak mogę zrobić elementy ( a nie teksty!) w The legend box większe?

Jak mogę powiększyć samo pudełko?

Author: jessag, 2013-11-18

2 answers

Aby kontrolować wyściółkę wewnątrz legendy (skutecznie zwiększając pole legendy) użyj borderpad kwarg.

Na przykład, oto wartość domyślna:

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()

Tutaj wpisz opis obrazka


Jeśli zmienimy wewnątrz wypełnienia za pomocą borderpad=2, powiększymy ogólne pole legendy (jednostki są wielokrotnościami rozmiaru czcionki, podobnie jak 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()

Tutaj wpisz opis obrazka


Alternatywnie możesz zmienić odstępy między przedmiotami. Użyj labelspacing, aby kontrolować to:

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()

Tutaj wpisz opis obrazka


W większości przypadków jednak najbardziej sensowne jest dostosowanie zarówno labelspacing, jak i borderpad w tym samym czasie:

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()

Tutaj wpisz opis obrazka


Z drugiej strony, jeśli masz bardzo duże znaczniki, możesz zwiększyć długość linii pokazanej w legendzie. Na przykład Wartość domyślna może wyglądać mniej więcej tak:

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()

Tutaj wpisz opis obrazka

Jeśli zmienimy handlelength, otrzymamy dłuższe linie w legendzie, co wygląda trochę bardziej realistyczne. (Poprawiam również borderpad i labelspacing tutaj, aby dać więcej miejsca.)

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()

Tutaj wpisz opis obrazka


Z dokumentów, oto niektóre z innych opcji, które warto zbadać:

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
 53
Author: Joe Kington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 13:46:21

Podczas wywoływania legend możesz użyć argumentu prop z dict zawierającym rozmiar.

plt.errorbar(x, y, yerr=err, fmt='-o', color='k', label = 'DR errors')
plt.legend(prop={'size':50})

Np. Zmień rozmiar legendy

Zobacz tutaj, aby uzyskać więcej informacji na temat legenda

 10
Author: dabillox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 13:38:16