def test_legend_repeatcheckok(): fig, ax = plt.subplots() ax.scatter(0.0, 1.0, color='k', marker='o', label='test') ax.scatter(0.5, 0.0, color='r', marker='v', label='test') ax.legend() hand, lab = mlegend._get_legend_handles_labels([ax]) assert len(lab) == 2 fig, ax = plt.subplots() ax.scatter(0.0, 1.0, color='k', marker='o', label='test') ax.scatter(0.5, 0.0, color='k', marker='v', label='test') ax.legend() hand, lab = mlegend._get_legend_handles_labels([ax]) assert len(lab) == 2
def test_legend_repeatcheckok(): fig, ax = plt.subplots() ax.scatter(0.0, 1.0, color='k', marker='o', label='test') ax.scatter(0.5, 0.0, color='r', marker='v', label='test') hl = ax.legend() hand, lab = mlegend._get_legend_handles_labels([ax]) assert len(lab) == 2 fig, ax = plt.subplots() ax.scatter(0.0, 1.0, color='k', marker='o', label='test') ax.scatter(0.5, 0.0, color='k', marker='v', label='test') hl = ax.legend() hand, lab = mlegend._get_legend_handles_labels([ax]) assert len(lab) == 2
def legend(*args, outside=False, ax=None, axs=None, **kwargs): """Generate a nice legend. This is a wrapper of pyplot.legend(). Take a look there for the default arguments and options. The ticks and labels are moved to the opposite side. For `top` and `bottom` the default value of columns is set to the number of labels, for all other options to 1. In case of many labels this parameter needs to be adjusted. .. todo:: Use handles and labels from *args if provided Parameters ---------- outside : str or bool False, 'top', 'right', 'bottom' or 'left'. axs : list of mpl.axes.Axes List of axes which are used for extracting all labels. ax : mpl.axes.Axes Axes which is used for placing legend. args, kwargs See [pyplot.legend()](MPL_DOC.pyplot.legend.html) Returns ------- leg : matplotlib.legend.Legend Matplotlib legend handle. Examples -------- .. include:: ../gallery/legend/README.md """ default_kwargs = _legend_default_kwargs() if outside not in {False, *default_kwargs}: raise ValueError( 'Use for outside one of [False, {0}]'.format( ', '.join(['"{0}"'.format(dr) for dr in default_kwargs]), ), ) # parse axes args, ax = tools.parse_axes(*args, ax=ax) # parse axs if axs is None: axs = [ax] else: axs = tools.get_axes(axs) # shift axis to opposite side. if outside: activate_axis(_opposite_side(outside)) # set anchor, mode and location kwargs = {**default_kwargs.get(outside, {}), **kwargs} # get handles and labels of selected axes handles, labels = mlegend._get_legend_handles_labels(axs) # noqa: WPS437 # set number of ncol to the number of items if outside in {'top', 'bottom'}: kwargs.setdefault('ncol', len(labels)) # generate legend leg = ax.legend(handles, labels, *args, **kwargs) if __STYLE == 'minimal': leg.get_frame().set_linewidth(0.0) elif __STYLE == 'default': leg.get_frame().set_linewidth(plt.rcParams['axes.linewidth']) # shift title to the left if on top or bottom if outside in {'top', 'bottom'}: _shift_legend_title(leg) return leg