DataByDavid
DataByDavid

Reputation: 1069

Labels in Plots

I am having some issues adding labels to the legend. For some reason matplotlib is ignoring the labels I create in the dataframe. Any help?

pandas version: 0.13.0
matplotlib version: 1.3.1

import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt

# Sample dataframe
d = {'date': [pd.to_datetime('1/1/2013'), pd.to_datetime('1/1/2014'), pd.to_datetime('1/1/2015')],
     'number': [1,2,3],
     'letter': ['A','B','C']}
df = pd.DataFrame(d)

####################
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(13, 10))
fig.subplots_adjust(hspace=2.0) ## Create space between plots

# Chart 1
df.plot(ax=axes[0], label='one')

# Chart 2
df.set_index('date')['number'].plot(ax=axes[1], label='two')

# add a little sugar
axes[0].set_title('This is the title')
axes[0].set_ylabel('the y axis')
axes[0].set_xlabel('the x axis')
axes[0].legend(loc='best')
axes[1].legend(loc='best');

The problem is that Chart 1 is returning the legend as "number" and I want it to say "one".

Upvotes: 1

Views: 194

Answers (1)

Nipun Batra
Nipun Batra

Reputation: 11387

Will illustrate this for first axis. You may repeat for the second.

In [72]: fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(13, 10))

Get a reference to the axis

In [73]: ax=df.plot(ax=axes[0])

Get the legend

In [74]: legend = ax.get_legend()

Get the text of the legend

In [75]: text = legend.get_texts()[0]

Printing the current text of the legend

In [77]: text.get_text()
Out[77]: u'number'

Setting the desired text

In [78]: text.set_text("one")

Drawing to update

In [79]: plt.draw()

The following figure shows the changed legend for first axis. You may do the same for the other axis.

NB: IPython autocomplete helped a lot to figure out this answer!

enter image description here

Upvotes: 1

Related Questions