Reverse the order of legend Reverse the order of legend python python

Reverse the order of legend


You could call

handles, labels = ax.get_legend_handles_labels()ax.legend(handles[::-1], labels[::-1], title='Line', loc='upper left')

import numpy as npimport matplotlib.pyplot as pltnp.random.seed(2016)C0 = list('ABCDEF')C2 = np.random.randint(20000, size=(len(C0), 3))width = 1.0C1 = ['foo', 'bar', 'baz']ind = np.linspace(-width, width, len(C1))colorsArr = plt.cm.BuPu(np.linspace(0, 0.5, len(C2)))fig = plt.figure(figsize=(11,11))ax = fig.add_subplot(1, 1, 1)prevBar = 0for height, color, label in zip(C2, colorsArr, C0):    h = ax.bar(ind, height, width, bottom=prevBar, color=color, label=label)    prevBar = prevBar + heightplt.ylabel('Home Category')plt.title('Affinity - Retail Details(Home category)')# positions of the x-axis ticks (center of the bars as bar labels)tick_pos = [i+(width/2.0) for i in ind]# set the x ticks with namesplt.xticks(tick_pos, C1)plt.yticks(np.arange(0,70000,3000))handles, labels = ax.get_legend_handles_labels()ax.legend(handles[::-1], labels[::-1], title='Line', loc='upper left')plt.show()

enter image description here


Or you could use the simpler

handles, labels = ax.get_legend_handles_labels()ax.legend(reversed(handles), reversed(labels), title='Line', loc='upper left')


Use a negative number for the legend vertical spacing, like this:

matplotlib.pyplot.stackplot(X, *revDataValues,    linewidth=1.0,    edgecolor='black')matplotlib.pyplot.legend(revNames,    loc=6, bbox_to_anchor=(1.05, 0.5),    labelspacing=-2.5, frameon=False,         # reverse legend    fontsize=9.0)

Stacked Area Chart with reversed legend