[Tutor] plotting in python
Emile van Sebille
emile at fenx.com
Wed Nov 30 23:04:43 CET 2011
On 11/30/2011 1:08 PM stm atoc said...
> Hi there,
>
> I have a question regarding plotting with Python.
>
> I have the following python script:
>
> # coding: utf-8
> from pylab import *
> import numpy
>
> filename='ourtest_out.list'
>
> fh=open(filename)
> line=fh.readline()
> fh.close
>
> z=array([ float(val) for val in line.split()[1:] ])
>
>
> a = numpy.loadtxt(filename,skiprows=3)
> N=100
> t = a[:,0]
> nu = a[0:,1:N+1]
> #Conc = a[1:,N+1:]
> Conc = a[1:,N+1:]
>
> levels=arange(-10,1)
> levels=levels[-3]-levels
> t=t/360.
>
> figure()
> plot(Conc[0],z)
>
> xlabel('C')
> ylabel('z')
> #show()
> savefig('Conc.png')
> close()
>
> #########nu
> figure()
> lw = 2.0 #linewidth
> dpi = 96
>
> levels=arange(-10,1)
> levels=levels[-3]-levels
> plot(nu[0],z)
> xlabel('nu')
> ylabel('z')
> savefig('nu.png')
> close()
>
>
> --------However, once I run the program (run.py)
>
> I have error like this:
>
> ---------------------------------------------------------------------------
> ValueError Traceback (most recent call last)
> /Users/…./run.py in<module>()
> 24
> 25 figure()
> ---> 26 plot(Conc[0],z)
> 27
> 28 xlabel('C')
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/pyplot.py
> in plot(*args, **kwargs)
> 2284 ax.hold(hold)
> 2285 try:
> -> 2286 ret = ax.plot(*args, **kwargs)
> 2287 draw_if_interactive()
> 2288 finally:
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
> in plot(self, *args, **kwargs)
> 3781 lines = []
> 3782
> -> 3783 for line in self._get_lines(*args, **kwargs):
> 3784 self.add_line(line)
> 3785 lines.append(line)
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
> in _grab_next_args(self, *args, **kwargs)
> 315 return
> 316 if len(remaining)<= 3:
> --> 317 for seg in self._plot_args(remaining, kwargs):
> 318 yield seg
> 319 return
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
> in _plot_args(self, tup, kwargs)
> 292 x = np.arange(y.shape[0], dtype=float)
> 293
> --> 294 x, y = self._xy_from_xy(x, y)
> 295
> 296 if self.command == 'plot':
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
> in _xy_from_xy(self, x, y)
> 232 y = np.atleast_1d(y)
> 233 if x.shape[0] != y.shape[0]:
> --> 234 raise ValueError("x and y must have same first dimension")
> 235 if x.ndim> 2 or y.ndim> 2:
> 236 raise ValueError("x and y can be no greater than 2-D")
>
> ValueError: x and y must have same first dimension
>
>
> -------So, What would you suggest?
Looking over the traceback and code, it would appear the error is saying
that there is an inconsistency with the arguments expected vs the
arguments passed, which appears in this case to relate to ...
plot(Conc[0],z)
... which derives its parameters from the two lines ...
z=array([ float(val) for val in line.split()[1:] ])
... and ...
a = numpy.loadtxt(filename,skiprows=3)
So, I'd conclude that I'd need a better understanding of how to use the
functions plot, array and numpy.loadtext. Neither plot nor array are
python builtins nor defined within your script, so they're likely
brought in from ...
from pylab import *
... which is generally not something you want to do except when first
starting to experiment and learn a new module, and then I'd keep things
to the interactive interpreter for testing and discovery. This form of
import is generally thought of as polluting the namespace and may allow
library specific names to mask python builtins. For example. suppose a
module 'xyz' contains a special 'print' function. Executing 'from xyz
import *' would shadow the python builtin print function essentially
making it inaccessible. It's possible (although unlikely in the case of
pylab specifically) that any python builtins that are used in your
script have been replaced with pylab versions. A better technique is to
simply import pylab and refer to its functions as pylab.xyz so that no
ambiguity is possible.
So, read up on pylab, find their support list [1], and follow up there.
We focus mainly on getting you far enough along with python basics and
generally leave specific library support to the library authors and
support groups.
HTH
Emile
[1] start at http://www.scipy.org/Mailing_Lists
More information about the Tutor
mailing list