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
Jak mogę zrobić elementy ( a nie teksty!) w The legend box większe?
Jak mogę powiększyć samo pudełko?
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()
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()
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()
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()
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()
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()
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
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.
Zobacz tutaj, aby uzyskać więcej informacji na temat legenda
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