plot legend behavior & question

Thank you for the immediate and extremely helpful suggestions. Changing the string to a tuple works great, and I did not think about using the “label” keyword in plot. I think this will greatly simplify the plotting.

Thanks again for the “instant gratification”. :slight_smile:

Charles

···

==========

The 2nd Law of Thermodynamics… If you think things are a mess now, JUST WAIT!

On Tue, Sep 16, 2008 at 3:28 PM, Jae-Joon Lee <lee.j.joon@…287…> wrote:

(‘CO2’) is not a tuple but still a single string.

You may use a list [‘CO2’] or put an extra “,” to make it a tuple (‘CO2’,).

And, you may consider to use the “label” keyword with your plot command.

IHTH,

-JJ

On Tue, Sep 16, 2008 at 5:09 PM, charles reid <charlesreid1@…287…> wrote:

Hi there -

I’m using the latest stable pylab/matplotlib (0.98.3) via OS X 10.5.4. I am

plotting a simple array of data, and I’m getting some strange behavior when

I try to add a legend to the plot.

First, the plot without the legend:

f=figure(1)

title(“Equilibrium Concentration vs. Equivalence Ratio”)

line1 = plot(phi,xeq[1])

show()

This works fine. However, when I try to add a legend, I get an error. I

add this:

f=figure(1)

title(“Equilibrium Concentration vs. Equivalence Ratio”)

line1 = plot(phi,xeq[1])

f.legend(line1,(‘CO2’),loc=(0.8,0.8))

show()

And it gives me an error because of the second argument to f.legend:


ValueError Traceback (most recent call last)

/Users/charles/Documents/school/combustion/problem-2-52/adiabatic.py in

()

111 title("Equilibrium Concentrations vs. Equivalence Ratio")
112 line1=plot(phi,xeq[1])

–> 113 f.legend(line1,(‘CO2’),loc=(0.8,0.8))

114 show()
115

/Library/Python/2.5/site-packages/matplotlib-0.98.3-py2.5-macosx-10.3-i386.egg/matplotlib/figure.pyc

in legend(self, handles, labels, *args, **kwargs)

841         """
842         handles = flatten(handles)

–> 843 l = Legend(self, handles, labels, *args, **kwargs)

844         self.legends.append(l)
845         return l

/Library/Python/2.5/site-packages/matplotlib-0.98.3-py2.5-macosx-10.3-i386.egg/matplotlib/legend.pyc

in init(self, parent, handles, labels, loc, numpoints, prop, pad,

markerscale, labelsep, handlelen, handletextsep, axespad, shadow)

180         textleft = left+ self.handlelen+self.handletextsep
181         self.texts = self._get_texts(labels, textleft, top)

–> 182 self.legendHandles = self._get_handles(handles, self.texts)

183
184         self._drawFrame = True

/Library/Python/2.5/site-packages/matplotlib-0.98.3-py2.5-macosx-10.3-i386.egg/matplotlib/legend.pyc

in _get_handles(self, handles, texts)

246         # centered marker proxy
247

–> 248 for handle, label in safezip(handles, texts):

249             if self.numpoints > 1:
250                 xdata = np.linspace(left, left + self.handlelen,

self.numpoints)

/Library/Python/2.5/site-packages/matplotlib-0.98.3-py2.5-macosx-10.3-i386.egg/matplotlib/cbook.pyc

in safezip(*args)

899     for i, arg in enumerate(args[1:]):
900         if len(arg) != Nx:

–> 901 raise ValueError(_safezip_msg % (Nx, i+1, len(arg)))

902     return zip(*args)
903

ValueError: In safezip, len(args[0])=1 but len(args[1])=3

WARNING: Failure executing file: <adiabatic.py>

I don’t understand why this doesn’t work, because I should be able to give a

label of arbitrary length. It doesn’t work when I replace single quotes

with double quotes, either. But I change the length to 1, like it wants:

f=figure(1)

title(“Equilibrium Concentrations vs. Equivalence Ratio”)

line1=plot(phi,xeq[1])

f.legend(line1,(‘C’),loc=(0.8,0.8))

show()

Which creates a plot, with a legend, but when I move the mouse over the

plot, it has the “thinking” cursor (hourglass). I can’t close the window

using the buttons in the upper left hand corner, I can’t close it using

close(1), and I can’t close it using close(‘all’). I end up having to run

‘killall Python’ from a command line.

I can get the plot with the legend to work, albeit with only ONE character

for the name, by running (from Python)

f=figure(1)

title(“Equilibrium Concentrations vs. Equivalence Ratio”)

line1=plot(phi,xeq[1])

f.legend(line1,(‘C’),loc=(0.8,0.8))

(without the show() command) in the script, then running show() when the

script is done, and I don’t get the “thinking” cursor.

Note: I have also used the function figlegend() with the exact same

results/problems.

  1. How can I give a legend name with a length of more than 1 character?

What am I doing wrong?

  1. What is causing the behavior with the thinking cursor?

Also, ultimately I would like to make a plot with 30+ species, instead of

just CO2. Is there a way to do this other than doing the following?

line1 line2 line3 … =

plot(phi,xeq[1],phi,xeq[2],phi,xeq[3],…)

f.legend((line1,line2,…),(name[0],name[1],name[2],…),loc=(0.8,0.8))

Thanks ahead of time for any suggestions or hints.

Charles


This SF.Net email is sponsored by the Moblin Your Move Developer’s challenge

Build the coolest Linux based applications with Moblin SDK & win great

prizes

Grand prize is a trip for two to an Open Source event anywhere in the world

http://moblin-contest.org/redirect.php?banner_id=100&url=/


Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users