Re: [Matplotlib-users] bar plot (autofmt_xdate and left-right margins )

2012-04-01 Thread Massimo Di Stefano

i modified the code as follow :

def bar_plot(data, Yval, datamin=None, datamax=None):
""" doc """ 
x = data[0]
y = data[1]
# reduce dataset based on min max date
if datamin != datamax != None :
x = data[0][np.where((data[0]>=datamin) & (data[0]<=datamax))[0]]
y = data[1][np.where((data[0]>=datamin) & (data[0]<=datamax))[0]]
# index for labeling
xp = np.where((y<=0))[0]
xn = np.where((y>0))[0]
xx = np.where((y>0) | (y<=0))[0]
# extract positive and negative values
x_p = x[np.where(y>=0)[0]]
y_p = y[np.where(y>=0)[0]]
x_n = x[np.where(y<0)[0]]
y_n = y[np.where(y<0)[0]]
# start plotting code
fig = plt.figure(figsize=(15,5))
width = 0.7
plt.autoscale(enable=True, axis='both', tight=True)
plt.bar(xn, y_n, width, color='blue', lw=2)
plt.xticks(xx + (width/1.2), x)
plt.autoscale(enable=True, axis='both', tight=True) 
plt.bar(xp, y_p, width, color='red', lw=2)
plt.title(Yval)
fig.autofmt_xdate() 
plt.xlabel("Year")
plt.ylabel(Yval)
plt.axhline(0, color='black', lw=2)
plt.grid(True)


Il giorno Mar 31, 2012, alle ore 10:21 PM, Massimo Di Stefano ha scritto:

> 
> Hi All
> 
> i'm bring to do  simple bar plot formatting the xlabe as 'date' using a 
> syntax like :  fig.autofmt_xdate(bottom=0.1) 
> but something is wrong in my code, please have you any hints on ghow to 
> proper display the dates (Year) along the x axis
> and how to leave a margin on the left and on the right of the plot?   (my 
> example has a margin only on the right, while the first bar is adjacent to 
> the Y axis)
> 
> 
> ###
> 
> import numpy as np
> import matplotlib.pyplot as plt
> 
> x = np.array([1969,1970,1971,1972,1973,1974])
> y = np.array([-3,10,23,-4,-5,6])
> data = [x,y]
> 
> print x
> print y
> 
> 
> 
> 
> def bar_plot(data, Yval, datamin=None, datamax=None):
>""" doc """ 
>fig = plt.figure()
>fig.autofmt_xdate(bottom=0.1) 
>ax1 = fig.add_subplot(211)
>x = data[0]
>y = data[1]
>if datamin != datamax != None :
>x = data[0][np.where((data[0]>=datamin) & (data[0]<=datamax))[0]]
>y = data[1][np.where((data[0]>=datamin) & (data[0]<=datamax))[0]]
>x_p = x[np.where(y>=0)[0]]
>y_p = y[np.where(y>=0)[0]]
>x_n = x[np.where(y<0)[0]]
>y_n = y[np.where(y<0)[0]]
>ax1.bar(x_n, y_n, facecolor='b') 
>ax1.bar(x_p, y_p, facecolor='r') 
>ax1.grid(True)
>ax1.set_xlabel('Year')
>ax1.set_ylabel(Yval)
>ax1.set_title(Yval)
>ax1.axhline(0, color='black', lw=1)
>plt.show()
> 
> bar_plot(data, 'Var', datamin=1970, datamax=1973)
> 
> ###


--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] trouble with pcolor

2012-04-01 Thread David Craig
Hi, I am trying to use pcolor to visualise three variables. For example if
I have a value for z at x and a value for z at y something like [x1, x2,
x3] = [z1, z2, z3] and [y1, y2, y3] = [z2, z1, z3]. Then I use meshgrid to
create the grid for x and y,
X, Y = meshgrid(x, y)
the result is two array's of shape (3,3).
I then need to reshape Z to use pcolor, which is what I am having trouble
with. I know I want a result like,

y3  0   0  z3

y2  z1 0   0

y1  0  z2  0

 x1 x2 x3

but have no idea how to create it. Anyone able to help??
thanks
D
--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Copying a figure instance?

2012-04-01 Thread Joseph Meiring
Thanks Tony, I think this will work! 

Cheers, 
Joe
On Mar 31, 2012, at 11:33 AM, Tony Yu wrote:

> 
> 
> On Fri, Mar 30, 2012 at 12:25 PM, eoj  wrote:
> 
> Basically the problem is like this. I have a relatively expensive (time wise)
> figure to create, specifically a map with lots of detail in it. On top of
> that, I'm  making an inset set of axes to highlight some regions. I'm having
> to recreate the base of the map, which is static, every time I want to make
> an inset for a different region which is taking forever. What I want to do
> is something like this:
> 
> fig = figure()
> 
> #do stuff that makes the expensive figure
> 
> for region in regions:
>fig2 = copy.copy(fig)
>ax2 = fig.add_axes([0.1, 0.15, 0.25, 0.25])
>ax2.fill(x1,y1)
>savefig(region_name)
>close()
> 
> 
> 
> The problem is that the clf() clear figure function seems to clear the base
> of the map off, even if I try to make a copy of it inside a loop that is
> generating the insets. Also, close() seems to close fig and not fig2. Does
> this rambling make any sense, and if so, any suggestions?
> 
> 
> If all your additions are confined to the inset axes, you can use 
> `fig.delaxes` to remove the axes from the figure (see example below). If you 
> want to save and restore, as you describe above, you should (in principal) be 
> able to do so with `canvas.copy_from_bbox` and `canvas.restore_region`, but I 
> couldn't get it to work (see bottom of the animation cookbook).
> 
> Cheers,
> -Tony
> 
> # ~~~ example
> import numpy as np
> import matplotlib.pyplot as plt
> 
> fig, ax = plt.subplots()
> ax.imshow(np.random.uniform(size=(10, 10)))
> 
> ax_inset = fig.add_axes([0.3, 0.3, 0.2, 0.2])
> ax_inset.plot([0, 1])
> plt.savefig('plot0')
> 
> fig.delaxes(ax_inset)
> ax_inset = fig.add_axes([0.5, 0.5, 0.2, 0.2])
> ax_inset.plot([1, 0])
> plt.savefig('plot1')
> # ~~~
> 

===
Joseph D. Meiring
Department of Astronomy
LGRT 517
University of Massachusetts
Amherst MA 01003
===

--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Subplot array and colorbar

2012-04-01 Thread Eric Firing
On 03/31/2012 07:26 AM, Marston wrote:
> Hi, I'm trying to create a plot, with subplots where each row of x plots
> have a common colorbar beneath it. Only the the top row will have
> titles. I've tried creating a function to do this but I only achieve
> partial success. Here is an image created in another program that I want
> to duplicate: I made several functions to do this. Here's one of them:
> def Plot(self,title,plist): for k in np.sort(self.vdic.keys()):
> plt.subplot(5,13,self.window) cs =
> plt.contourf(22,22,np.squeeze(self.vdic[k]),plist['levels'],
> cmap=cm.get_cmap('jet',len(plist['levels'])-1)) plt.axis('off') if
> title: plt.title(k,fontsize=tsize) window += 1 cbar =
> plt.colorbar(cax=plist['cax'],orientation='h') I've given up in getting
> the text on the left because every attempt using text fails. Now if this
> is a horrible way and you have a better idea, please feel free to share.
> I'm new at matplotlib and this is a great way to see how things can be
> done better and in different ways.

The problem is that what you are trying to do is a bit too complicated 
for the basic pyplot interface and for subplots.  The axes_grid toolkit 
might be helpful, or you may want to calculate the axes positions 
yourself as in 
http://matplotlib.sourceforge.net/examples/pylab_examples/multi_image.html.

For your text on the left, you can add text to a figure using the same 
coordinates as you use for specifying axes positions: (0,0) is lower 
left, (1,1) is upper right. E.g., in "ipython --pylab",

fig = plt.figure()
ax = fig.add_axes([0.4, 0.45, 0.5, 0.1])
lableft = fig.text(0.1, 0.5, "A Label")
plt.draw() #needed only when interactive


Eric


> 
> View this message in context: Subplot array and colorbar
> 
> Sent from the matplotlib - users mailing list archive
>  at Nabble.com.
>
>
>
> --
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
>
>
>
> ___
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] abline plot?

2012-04-01 Thread Skipper Seabold
Hi,

I wrote an abline_plot function, and I'm curious if what I'm doing is the
best way to go about this. I tried unsuccessfully to get the transforms to
do what I want, but I'm not sure if it's possible. What I came up with is
to use callbacks to draw an "infinite" line. It works, but it seems a bit
sluggish. Does anyone have any thoughts on improvements, anything I'm
missing, or an alternative implementation? The only problem I see right now
is that it assumes ax only has one ABLine2D child.

Thanks,

Skipper

import numpy as np
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt


### Generate some data
intercept = 1.3
slope = .5
x = np.random.random(25)
y_noise = intercept + slope * x + np.random.randn(25)

### Set up the plot

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y_noise)

class ABLine2D(Line2D):

def update_datalim(self, ax):
ax.set_autoscale_on(False)

children = ax.get_children()
abline = [children[i] for i in range(len(children))
   if isinstance(children[i], ABLine2D)][0]
x = ax.get_xlim()
y = [x[0]*slope+intercept, x[1]*slope+intercept]
abline.set_data(x,y)
ax.figure.canvas.draw()

line = ABLine2D(x, y)
ax.add_line(line)
ax.callbacks.connect('xlim_changed', line.update_datalim)
ax.callbacks.connect('ylim_changed', line.update_datalim)

plt.show()
--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] abline plot?

2012-04-01 Thread Skipper Seabold
On Sun, Apr 1, 2012 at 4:23 PM, Skipper Seabold  wrote:

> Hi,
>
> I wrote an abline_plot function, and I'm curious if what I'm doing is the
> best way to go about this. I tried unsuccessfully to get the transforms to
> do what I want, but I'm not sure if it's possible. What I came up with is
> to use callbacks to draw an "infinite" line. It works, but it seems a bit
> sluggish. Does anyone have any thoughts on improvements, anything I'm
> missing, or an alternative implementation? The only problem I see right now
> is that it assumes ax only has one ABLine2D child.
>
>
Hmm, it actually seems to handle multiple ablines ok, though I don't know
if it's robust. Should ABLine2D take a slope and intercept in its
instantiation?


> Thanks,
>
> Skipper
>
> import numpy as np
> from matplotlib.lines import Line2D
> import matplotlib.pyplot as plt
>
>
> ### Generate some data
> intercept = 1.3
> slope = .5
> x = np.random.random(25)
> y_noise = intercept + slope * x + np.random.randn(25)
>
> ### Set up the plot
>
> fig = plt.figure()
> ax = fig.add_subplot(111)
> ax.scatter(x, y_noise)
>
> class ABLine2D(Line2D):
>
> def update_datalim(self, ax):
> ax.set_autoscale_on(False)
>
> children = ax.get_children()
> abline = [children[i] for i in range(len(children))
>if isinstance(children[i], ABLine2D)][0]
> x = ax.get_xlim()
> y = [x[0]*slope+intercept, x[1]*slope+intercept]
> abline.set_data(x,y)
> ax.figure.canvas.draw()
>
> line = ABLine2D(x, y)
> ax.add_line(line)
> ax.callbacks.connect('xlim_changed', line.update_datalim)
> ax.callbacks.connect('ylim_changed', line.update_datalim)
>
> plt.show()
>
--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] assigning a plot object to a figure

2012-04-01 Thread Eric Firing
On 03/30/2012 01:23 PM, Emmanuel Mayssat wrote:
> Hello all,
>
> I can create a figure
> and get the corresponding axes/plots
>
> for examples:
> 1/
> fig = Figure(figsize=(width, height), dpi=dpi)
> ax = gif.add_subplot(111)
>
> 2/
> fig, ax = plt.subplots()
>
> but I would like to create my plot independently from the figure and
> assign it to a figure
>
> I code I would like to do something like this
>
> my_ax = Axes(...)
> my_ax.plot(x,y)
>
>
> ax = my_ax
>
> or
>
> my_ax.set_figure(fig)
>
> How can I create the axes/plot object independently from the figure?

As far as I can see, you can't.  The figure is deeply embedded in the 
Axes object; that's why the figure is an argument in Axes.__init__().

> Better yet, how can I assign an axe to a figure?

I don't think you can.  It looks to me like Axes.set_figure should be 
clearly marked as a private method, not to be used except in 
Axes.__init__().

Short of a major refactoring of mpl, I think you will need to find some 
other way of accomplishing your ultimate aim.

Eric

> --
> Emmanuel

--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] how to set contourf plot colorbar narrow?

2012-04-01 Thread Eric Firing
On 03/29/2012 06:29 AM, Chao YUE wrote:
> Dear all,
>
> I make a contourf plot but I think the colorbar is too wide. Can I make
> it narrower (slimmer)?
>

Yes, you can use the aspect kwarg.  The default is 20.  Try

cbar = plt.colorbar(aspect=40)

http://matplotlib.sourceforge.net/api/figure_api.html#matplotlib.figure.Figure.colorbar

Eric

> plt.contourf(data)
> cbar=plt.colorbar()
>
> ??
>
> thanks for any suggestions.
>
> cheers,
>
> Chao
>
> --
> ***
> Chao YUE
> Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL)
> UMR 1572 CEA-CNRS-UVSQ
> Batiment 712 - Pe 119
> 91191 GIF Sur YVETTE Cedex
> Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16
> 
>
>
>
> --
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
>
>
>
> ___
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] installing basemap

2012-04-01 Thread Jeff Whitaker

On 3/31/12 5:48 AM, David Craig wrote:
Hi, I previously installed basemap by using the yum command. This 
installed version 0.99.4. I want to install the latest version so I 
can use shaded relief etc. This may be more of a linux problem but as 
I am more familiar with python than linux I thought someone here may 
be able to help.
Following the website instructions 
(http://matplotlib.github.com/basemap/users/installing.html) I 
downloaded the latest version and untarred it. Then in the basemap 
directory (which contains geos-3.2.0) I try to set the environment 
variable GEOS_DIR to point to the location of libgeos_c and geos_c.h.

I use the find command to locate the files,
/find / -name geos_c.h/ returns the location of that file as 
//usr/lib/basemap-1.0.1/geos-3.2.0/capi/geos_c.h/

and
/find / -name libgeos*/
returns
//libgeos_c_la-geos_c.Plo
/usr/lib/libgeos-3.3.1.so 
/usr/lib/libgeos_c.so.1.7.1
/usr/lib/libgeos_c.so.1/
so I set GEOS_DIR to /usr/lib(not sure if this is correct).
I then cd to the basemap directory and run,
python setup.py install
[davcra@David basemap-1.0.1]$ sudo python setup.py install
[sudo] password for davcra:
checking for GEOS lib in /root 
checking for GEOS lib in /usr 
checking for GEOS lib in /usr/local 
checking for GEOS lib in /sw 
checking for GEOS lib in /opt 
checking for GEOS lib in /opt/local 

Can't find geos library . Please set the
environment variable GEOS_DIR to point to the location
where geos is installed (for example, if geos_c.h
is in /usr/local/include, and libgeos_c is in /usr/local/lib,
set GEOS_DIR to /usr/local), or edit the setup.py script
manually and set the variable GEOS_dir (right after the line
that says "set GEOS_dir manually here".
The problem seems to be with GEOS_DIR but I am not sure what I should 
set it to.

Thanks
D

David:

The basemap setup.py is assuming that the geos library is installed in 
/lib, and geos_c.h in /include.  You should set 
GEOS_DIR to the directory you specified with --prefix when you ran 
configure for geos 3.2.0 (I think the default is /usr/local).  However, 
it looks like you have a redhat installed geos library in /usr/lib 
(seems like it is version 3.3.1).  You probably could just install the 
-dev package (which would put the include file  in /usr/include), and 
the basemap setup.py would autodetect it.


Also, the latest version of basemap is 1.0.2, not 1.0.1.

-Jeff
--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users