Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib bar plot add legend from categories dataframe column

I try to add the legend which should, according to my example, output:

  1. a red square with the word fruit and
  2. a green square with the word veggie.

I tried several things (the example below is just 1 of the many trials), but I can't get it work.

Can someone tell me how to solve this problem?

import pandas as pd
from matplotlib import pyplot as plt
data = [['apple', 'fruit', 10], ['nanaba', 'fruit', 15], ['salat','veggie', 144]] 
data = pd.DataFrame(data, columns = ['Object', 'Type', 'Value']) 

colors = {'fruit':'red', 'veggie':'green'}           
c = data['Type'].apply(lambda x: colors[x])

bars = plt.bar(data['Object'], data['Value'], color=c, label=colors)
plt.legend()

plot

like image 284
S12000 Avatar asked Aug 03 '19 16:08

S12000


People also ask

Can a legend be drawn in a bar plot Matplotlib?

The barplot() command is the only general plotting command that has a legend parameter. You can pass additional parameters to the legend using the args.

How do you make a legend on a bar graph in Python?

Create a list of data x3, y3, z3, dx, dy and dz using numpy. Plot a 3D bar using bar3d() method. Create a rectangle axis for legend placement. Use legend() method to place the legend for bars.


1 Answers

The usual way to create a legend for objects which are not in the axes would be to create proxy artists as shown in the legend guide

Here,

colors = {'fruit':'red', 'veggie':'green'}         
labels = list(colors.keys())
handles = [plt.Rectangle((0,0),1,1, color=colors[label]) for label in labels]
plt.legend(handles, labels)

enter image description here

like image 144
ImportanceOfBeingErnest Avatar answered Oct 03 '22 16:10

ImportanceOfBeingErnest