Вы можете изменить размер патчей легенды несколькими способами.
Во-первых, вы можете увеличить ширину с помощью опции handlelength
до plt.legend
.
Однако, с помощью kwargs нет возможности увеличить их высоту.Так что нам нужно перебрать патчи после создания легенды.Если мы сохраним ссылку на легенду при ее создании leg = plt.legend(...)
, то мы можем зациклить патчи, используя for patch in leg.get_patches():
.
. Затем вы можете изменить высоту патча, используя patch.set_height()
.
Тем не менее, все эти переделки означают, что они не будут выровнены совершенно правильно.Поэтому нам также необходимо немного изменить их вертикальное положение (используя patch.set_y()
).
Я также обнаружил, что это помогло увеличить вертикальный интервал надписей в легенде, чтобы они подходили по размеру (используйте labelspacing
kwarg).
И, наконец, я добавил новую строку в начале надписей легенды, чтобы все это выглядело красиво (label='\nHatch 1'
).
Полный сценарий приведен ниже.Вы можете поиграть со значениями labelspacing
, handlelength
, patch.set_height()
и patch.set_y()
в соответствии с вашими потребностями.
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
n = 5
hatch_1 = 'o'
hatch_2 = '.'
opacity = 0.4
bar_width = 0.4
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)
bars = plt.bar(x, y, bar_width, align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_1)
y = np.random.randint(low=0, high=10, size=n)
bars = plt.bar(x + bar_width, y, bar_width,
align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_2)
patch_1 = Patch(fill=False, label='\nHatch 1', hatch=hatch_1, alpha=opacity)
patch_2 = Patch(fill=False, label='\nHatch 2', hatch=hatch_2, alpha=opacity)
# add legends
leg = plt.legend(handles=[patch_1, patch_2], loc='upper right', labelspacing=1.5, handlelength=4)
for patch in leg.get_patches():
patch.set_height(22)
patch.set_y(-6)
plt.show()
