I  guess  it  was  a  FAQ  :) 

The  correct  way  -  after  experimenting  with  imshow  options  -  is  to  
transpose  the  data  and  use  origin='lower'  option 

 

imshow(c.T,interpolation='nearest',origin='lower') 

 

Piotr 

 

 

----- Original Message ---- 

From: Piotr Zolnierczuk <[EMAIL PROTECTED]> 

To: matplotlib-users@lists.sourceforge.net 

Sent: Friday, February 22, 2008 2:31:08 PM 

Subject: [Matplotlib-users] imshow: axis not natural 

 

 Hi, 

it  is  probably  a  faq  -  but  I  could  not  find  it  anywhere. 

 

I  would  like  to  plot  a  2D  distribution  (2D  histogram)  of  some  data  
using  a  2D  numpy.array  that  contains  my  data:  c[ix,iy]  

When  I  plot  it  via  imshow  the  x  axis  points  downwards  and  the  y  
axis  point  to  the  left. 

What  I  want  is  that  the  x-axis  points  to  the  left  and  the  y  axis  
points  upwards. 

 

So  I  ended  up  writing  a  small  script  twodimshow   (below)  where  I  
transpose  data  (x<->y)  and  also  flip  the  sign  of  the  y-axis 

 

Now:  is  there  a  better  way  of  doing  it?  

 

 

See  also  CERN  Root  C++  package  
(ftp://root.cern.ch/root/doc/3Histograms.pdf)  and/or  (SLAC  HIPPO  
(http://www.slac.stanford.edu/grp/ek/hippodraw/) 

 

-------------------  CODE  BELOW  --------------------------- 

import  numpy 

from  pylab  import  * 

 

def  convertToImShow(data,copy=True): 

      '''Converts  data  so  that  imshow  displays  x,y  as  a  normal  

      physicist  expects  ie  x  pointing  left  and  y  pointing  up''' 

      data   =  numpy.array(data.T,copy=copy) 

      if  data.ndim  !=  2: 

            raise  TypeError,'data  must  be  a  two-dimensional  matrix' 

      nx,ny  =  data.shape 

      for  i  in  range(nx/2): 

            j=  nx  -  i  -  1 

            for  k  in  range(ny):  data[j,k],data[i,k]=data[i,k],data[j,k] 

      return  data 

 

def  twodimshow(data,extent=None,aspect=None): 

      r  =  convertToImShow(data) 

      if  not  aspect  and  extent: 

            if  len(extent)>=4: 

                  aspect  =  (extent[1]  -  extent[0])/float(extent[3]  -  
extent[2]) 

      imshow(r,extent=extent,aspect=aspect,interpolation='nearest') 

 

if  __name__  ==  "__main__": 

      c  =  zeros((4,4)) 

      for  ix  in  range(4): 

            for  iy  in  range(ix): 

                  c[ix,iy]=ix+iy 

 

      figure() 

      subplot(221) 

      imshow(c     ,interpolation='nearest') 

      title('Axis  direction  not  natural') 

      xlabel('Y-Axis');  ylabel('X-Axis') 

 

      subplot(222) 

      imshow(c.T  ,interpolation='nearest') 

      title('Not  there  yet') 

      xlabel('X-Axis');  ylabel('Y-Axis') 

 

      subplot(223) 

      twodimshow(c,extent=(0,4,0,4)) 

      title('That  is  what  I  want') 

      xlabel('X-Axis');  ylabel('Y-Axis') 

      show() 

 

 

 

 

 

         
____________________________________________________________________________________
 

Never  miss  a  thing.   Make  Yahoo  your  home  page.  

http://www.yahoo.com/r/hs 

 

------------------------------------------------------------------------- 

This  SF.net  email  is  sponsored  by:  Microsoft 

Defy  all  challenges.  Microsoft(R)  Visual  Studio  2008. 

http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ 

_______________________________________________ 

Matplotlib-users  mailing  list 

Matplotlib-users@lists.sourceforge.net 

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

 

 







      
____________________________________________________________________________________
Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to