Legend and proxy artists

Hi

I have recently updated to Matplotlib-1.1.0 and now one of my scripts
displays the following warning:

UserWarning: Legend does not support [[<matplotlib.lines.Line2D object
at 0x1026296d0>]]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

The link it refers to doesn't seem to be much help, and I can't see
what I need to do in order to correctly display the legend. Below is
the appropriate plotting section of my script, could anyone offer
suggestions as to how to correctly display the legend?

# plot size, scale by golden ratio
fig = pyplot.figure()
fig.set_size_inches(10, 10 / ((1 + math.sqrt(5)) / 2))
date_axes = fig.add_subplot(111)

# setup secondary axes
value_axes = date_axes.twinx()

# set plot labels
date_axes.set_xlabel("Date")
date_axes.set_ylabel("Time")
value_axes.set_ylabel("Value")

# produce plot
morning_plot = date_axes.plot_date(morning[:,0], morning[:,1], 'bo-', ms=4)
evening_plot = date_axes.plot_date(evening[:,0], evening[:,1], 'go-', ms=4)
value_plot = []
for v in value:
  value_plot.append(value_axes.plot_date(w[:,0], w[:,1], 'ro-', ms=4))

# legend
date_axes.legend(([morning_plot], [evening_plot], [value_plot]),
    ("Morning", "Evening", "Value"),
    numpoints=1, loc=0, borderpad=1, shadow=True, fancybox=True)

# save plot
fig.savefig(plot_file)

Cheers

Adam

Your problem is that value_plot is a list of lists, and not a list of
lines. ax.plot_date returns a list of lines, so you need to do

value_plot.extend(value_axes.plot_date(w[:,0], w[:,1], 'ro-', ms=4))

rather than calling "append".

The legend method expects a list of matplotlib artists, not a list of lists.

JDH

···

On Thu, Oct 27, 2011 at 8:12 AM, Adam Mercer <ramercer@...287...> wrote:

Hi

I have recently updated to Matplotlib-1.1.0 and now one of my scripts
displays the following warning:

UserWarning: Legend does not support [[<matplotlib.lines.Line2D object
at 0x1026296d0>]]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

The link it refers to doesn't seem to be much help, and I can't see
what I need to do in order to correctly display the legend. Below is
the appropriate plotting section of my script, could anyone offer
suggestions as to how to correctly display the legend?

# plot size, scale by golden ratio
fig = pyplot.figure()
fig.set_size_inches(10, 10 / ((1 + math.sqrt(5)) / 2))
date_axes = fig.add_subplot(111)

# setup secondary axes
value_axes = date_axes.twinx()

# set plot labels
date_axes.set_xlabel("Date")
date_axes.set_ylabel("Time")
value_axes.set_ylabel("Value")

# produce plot
morning_plot = date_axes.plot_date(morning[:,0], morning[:,1], 'bo-', ms=4)
evening_plot = date_axes.plot_date(evening[:,0], evening[:,1], 'go-', ms=4)
value_plot = []
for v in value:
value_plot.append(value_axes.plot_date(w[:,0], w[:,1], 'ro-', ms=4))

# legend
date_axes.legend(([morning_plot], [evening_plot], [value_plot]),
("Morning", "Evening", "Value"),
numpoints=1, loc=0, borderpad=1, shadow=True, fancybox=True)

# save plot
fig.savefig(plot_file)