I use the following code to plot the bar graph and need to present a legend in reverse order. How can I do it?
colorsArr = plt.cm.BuPu(np.linspace(0, 0.5, len(C2))) p = numpy.empty(len(C2), dtype=object) plt.figure(figsize=(11, 11)) prevBar = 0 for index in range(len(C2)): plt.bar(ind, C2[index], width, bottom=prevBar, color=colorsArr[index], label=C0[index]) prevBar = prevBar + C2[index] # Positions of the x-axis ticks (center of the bars as bar labels) tick_pos = [i + (width/2) for i in ind] plt.ylabel('Home Category') plt.title('Affinity - Retail Details(Home category)') # Set the x ticks with names plt.xticks(tick_pos, C1) plt.yticks(np.arange(0, 70000, 3000)) plt.legend(title="Line", loc='upper left') # Set a buffer around the edge plt.xlim(-width*2, width*2) plt.show()
On the Format tab, in the Current Selection group, click Format Selection. In the Axis Options category, under Axis Options, select the Series in reverse order check box.
Click the chart, and then click the Chart Design tab. Click Add Chart Element > Legend. To change the position of the legend, choose Right, Top, Left, or Bottom. To change the format of the legend, click More Legend Options, and then make the format changes that you want.
You could call
handles, labels = ax.get_legend_handles_labels() ax.legend(handles[::-1], labels[::-1], title='Line', loc='upper left')
import numpy as np import matplotlib.pyplot as plt np.random.seed(2016) C0 = list('ABCDEF') C2 = np.random.randint(20000, size=(len(C0), 3)) width = 1.0 C1 = ['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 = 0 for height, color, label in zip(C2, colorsArr, C0): h = ax.bar(ind, height, width, bottom=prevBar, color=color, label=label) prevBar = prevBar + height plt.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 names plt.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()
Or you could use the simpler
handles, labels = ax.get_legend_handles_labels() ax.legend(reversed(handles), reversed(labels), title='Line', loc='upper left')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With