Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reverse the order of a legend

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() 
like image 989
Yakov Avatar asked Jan 03 '16 11:01

Yakov


People also ask

How do you reverse the order of a legend in Powerpoint?

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.

How do I rearrange the legend in an Excel chart?

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.


2 Answers

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() 

enter image description here

like image 119
unutbu Avatar answered Oct 18 '22 08:10

unutbu


Or you could use the simpler

handles, labels = ax.get_legend_handles_labels() ax.legend(reversed(handles), reversed(labels), title='Line', loc='upper left') 
like image 26
Vaiaro Avatar answered Oct 18 '22 08:10

Vaiaro