Вы можете использовать kwarg от handler_map
до ax.legend
для управления дескрипторами легенды.
В этом случае вы хотите использовать обработчик HandlerErrorbar
из matplotlib.legend_handler
, и установите параметр xerr_size
. По умолчанию это 0,5, поэтому нам просто нужно уменьшить это число до чего-то подходящего для сюжета.
Руководствуясь руководством по легенде, мы можем посмотрите, как использовать handler_map
. Чтобы просто изменить один из дескрипторов панели ошибок, мы могли бы сделать это:
handler_map={h0: HandlerErrorbar(xerr_size=0.3)}
Предполагая, что вы хотите изменить все дескрипторы панели ошибок таким же образом, вы можете изменить h0
на type(h0)
:
handler_map={type(h0): HandlerErrorbar(xerr_size=0.3)}
Обратите внимание, что это всего лишь быстрый способ сообщить handler_map
, как изменить все Errorbars
. Обратите внимание, что это эквивалентно следующим действиям:
from matplotlib.container import ErrorbarContainer
...
ax1.legend(...
handler_map={ErrorbarContainer: HandlerErrorbar(xerr_size=0.3)}
...)
Использование сокращения type(h0)
просто означает, что вам не нужно иметь дополнительный импорт ErrorbarContainer
.
Объединив это в вашем минимальном примере:
import matplotlib
import matplotlib.pyplot as plt
# Import the handler
from matplotlib.legend_handler import HandlerErrorbar
font = {'family' : 'serif',
'serif': 'Computer Modern Roman',
'weight' : 'medium',
'size' : 19}
matplotlib.rc('font', **font)
matplotlib.rc('text', usetex=True)
fig,ax1=plt.subplots()
h0=ax1.errorbar([1,2,3],[1,2,3],[1,2,1],c='b',label='$p=5$')
h1=ax1.errorbar([1,2,3],[3,2,1],[1,1,1],c='g',label='$p=5$')
hh=[h0,h1]
ax1.legend(
hh, [H.get_label() for H in hh],
handler_map={type(h0): HandlerErrorbar(xerr_size=0.3)}, # adjust xerr_size to suit the plot
bbox_to_anchor=(0.02, 0.9, 1., .102),
loc=1, labelspacing=0.01,
handlelength=0.14, handletextpad=0.4,
frameon=False, fontsize=18.5)
plt.show()
Для доказательства того, что это сработало, вы можете сравнить это с исходным изображением до того, как я скорректировал размеры полосы ошибок:
person
tmdavison
schedule
07.09.2017