De Pauw Antoine wrote:
> Thanks Jeff,
>
> This seems to work with csv file types, and I've been experimenting a bit
> with it
>
> However, when I try to implement this with my original code (with binary
> files), I get an error like that one:
>
> Traceback (most recent call last):
>   File "C:\Python25\Projects\FigPlot\FigPlot.py", line 39, in <module>
>     x,y = map(Lon,Lat)
> TypeError: 'numpy.ndarray' object is not callable
>
> I think this is coming from the fact I use array objects to store values...
> could you confirm it?
>   

Antoine:  It looks like you the object map is not a Basemap instance, 
but a numpy array.  Try putting 'print type(map)' just ahead of this 
statement to verify this. I suspect your re-using the name 'map' in your 
code,  overwriting the Basemap class instance.

-Jeff
> Also, I'll see if it is possible to invert color scale and mask everything
> under a certain value
>
> Thanks very much for your help!
>
> Antoine De Pauw
> Collaborateur de recherches, Informatique - Research collaborator, IT
> Laboratoire de chimie quantique et photophysique - Quantum chemistry and
> photophysics laboratory
> Université Libre de Bruxelles - ULB
>
>
> -----Original Message-----
> From: Jeff Whitaker [mailto:[EMAIL PROTECTED] 
> Sent: jeudi 11 septembre 2008 14:10
> To: De Pauw Antoine
> Cc: 'Matplotlib Users'
> Subject: Re: [Matplotlib-users] Information request
>
> De Pauw Antoine wrote:
>   
>> Hi Jeff,
>>
>> I have put the code online with a sample of the data here:
>>
>> http://snipplr.com/view/8307/map-plotting-python-code-temporary/
>>
>> I hope you'll be able to give me some advice as it is quite difficult for
>> someone new in python and scientific computation
>>
>> Antoine De Pauw
>> Collaborateur de recherches, Informatique - Research collaborator, IT
>> Laboratoire de chimie quantique et photophysique - Quantum chemistry and
>> photophysics laboratory
>> Université Libre de Bruxelles - ULB
>>   
>>     
>
> Antoine: I may have the size of the pixels wrong, and lat/lon 
> transposed, but this is the general idea:
>
> from mpl_toolkits.basemap import Basemap
> import matplotlib.pyplot as plt
> import numpy as np
> lats = []; lons = []; data = []
> for line in open('pixels.dat'):
>     linesplit = line.split(',')
>     lons.append(float(linesplit[1]))
>     lats.append(float(linesplit[0]))
>     data.append(float(linesplit[2]))
> map = 
> Basemap(projection='mill',llcrnrlat=min(lats)-5,urcrnrlat=max(lats)+5,\
>                           
> urcrnrlon=max(lons)+5,llcrnrlon=min(lons)-5,resolution='l')
> x,y = map(lons,lats)
> plt.scatter(x,y,s=25,c=data,marker='s',edgecolor="None",cmap=plt.cm.jet)
> plt.colorbar(shrink=0.6)
> map.drawcoastlines()
> plt.show()
>
> -Jeff
>
>   
>> -----Original Message-----
>> From: Jeff Whitaker [mailto:[EMAIL PROTECTED] 
>> Sent: mercredi 10 septembre 2008 16:45
>> To: Antoine De Pauw
>> Cc: Matplotlib Users
>> Subject: Re: Information request
>>
>> Antoine De Pauw wrote:
>>   
>>     
>>> Thanks Jeff,
>>>
>>> In fact my points are arranged in three unsorted arrays, with a simple
>>>     
>>>       
>> scheme (thats why I couldn't plot them with imshow and others)
>>   
>>     
>>> arrays:
>>>
>>> [lat][lon][val]
>>> [-10][ 17][0.3]
>>> [ 37][ 23][3.7]
>>>  ...  ...  ...
>>>
>>> and so for many rows...
>>>
>>> what I have to do is looping through my arrays like that
>>>
>>> while i < rowcount:
>>>     plot_to_map(lat[i],lon[i],val[i])
>>>
>>> it is evidently an idea of how it could be done easily but my knowledge
>>>       
> of
>   
>>>     
>>>       
>> these libraries is too weak for me to figure out how to do it
>>   
>>     
>>> my data comes from huge binary files but is extremely simple, so it would
>>>     
>>>       
>> be really easy for anyone to help me as the problem itself is how to put
>> unsorted points on the map with latitude and longitude coordinates
>>   
>>
>> Antoine:  You haven't said if your data forms a rectangular array.  If 
>> so, you can build a 2-d array from the input file and plot it with 
>> imshow.  If not, you can still plug the elements into a 2-d masked 
>> array, leaving the missing pixels masked.  You say the points are 
>> 'unsorted', does that mean they are randomly distributed and do not form 
>> a rectangular grid?
>>
>> It would really be much easier to help if you gave us more information, 
>> such as how the data is structured, what the pixel footprint is, etc. 
>> Perhaps you could post the binary file on an ftp site somewhere with 
>> code to read it.
>>
>> Also, please hit 'reply all' when replying, so the matplotlib users 
>> mailing list is CC'ed.
>>
>> -Jeff
>>   
>>     
>>>> Antoine De Pauw wrote:
>>>>       
>>>>         
>>>>> Sir,
>>>>>
>>>>> I'm sorry, as english is not my mothertongue and it is sometimes
>>>>>         
>>>>>           
>> difficult to be understandable.
>>   
>>     
>>>>> All is in the script I gave to you initially, except the point drawing
>>>>>         
>>>>>           
>> code which would be useless as it is proven not to work (I dont know the
>> method to do it).
>>   
>>     
>>>>> What I have is a map, and a set of pixels I have to put on it with
>>>>>         
>>>>>           
>> geographic coordinates.
>>   
>>     
>>>>> I cannot find the right method to put colour pixels on the map, that's
>>>>>         
>>>>>           
>> the problem.
>>   
>>     
>>>>> I have that map in miller projection, and three arrays containing
>>>>>         
>>>>>           
>> respectively latitude, longitude and satellite measured value.
>>   
>>     
>>>>> What I need to obtain is something approximately like this:
>>>>>         
>>>>>           
> http://www.oma.be/BIRA-IASB/Molecules/SO2archive/info/background/so2sc200703
>   
>> _00_lr.gif but with the basemap toolkit.
>>   
>>     
>>>>> So, my question is: how could I do to plot a coloured pixel at
>>>>>         
>>>>>           
>> coordinates lat:lon on that map? If I have just the method to project a
>> geographic coordinate on the map and put a coloured pixel at the right
>> place, all is done and I just have to loop my arrays... Also, I would have
>> to implement some antialiasing on the map.
>>   
>>     
>>>>>   
>>>>>         
>>>>>           
>>>> Antoine:
>>>>
>>>> Are the pixels arranged on a regular grid - or are they randomly 
>>>> distributed?  If they are on a grid, it's easy (using pcolor or imshow).
>>>>         
>
>   
>>>> If you could send me your data I may be able to get you started.
>>>>
>>>> (I'm cc'ing the matplotlib list so others can join in the discussion).
>>>>
>>>>
>>>> -Jeff
>>>>       
>>>>         
>>>>> If this is not possible to do it in a simple and explainable way,
>>>>>           
> please
>   
>>>>>         
>>>>>           
>> tell me and I'll continue using matlab or searching for the bit of code
>> which will save me
>>   
>>     
>>>>> Anyway, I have to thank you for your interest to help me..
>>>>>
>>>>> Many thanks,
>>>>>
>>>>> Antoine De Pauw
>>>>>
>>>>>   
>>>>>         
>>>>>           
>>>>>> Antoine De Pauw wrote:
>>>>>>     
>>>>>>           
>>>>>>             
>>>>>>> Hi, and thanks for the answer
>>>>>>>
>>>>>>> In fact, what I do is reading a binary file to obtain 3 arrays
>>>>>>>             
>>>>>>>               
>> (Lat,Lon,Val) describing geographic points which are associated by index
>> (like point 1 is Lat[0]:Lon[0] with value Val[0])
>>   
>>     
>>>>>>> What I need to do is to plot some points on the map (miller
>>>>>>>               
> projection
>   
>>>>>>>             
>>>>>>>               
>> for most) based on latitude and longitude, to obtain a colour map (points
>> are unordered, it is from IASI satellite computations)
>>   
>>     
>>>>>>> I'm able to create a map, draw simple things on it, etc but the
>>>>>>>             
>>>>>>>               
>> problem I have is any method I try for plotting points is failing, either
>> pcolor, pcolormesh, imshow, etc.
>>   
>>     
>>>>>>> When I found your post on that mailing list, I figured out that you
>>>>>>>             
>>>>>>>               
>> might have the experience and skills to easily explain to me how to
>> manipulate these points and plot them on the map, as there's like no help
>>     
> on
>   
>> the web except standard examples...
>>   
>>     
>>>>>>> Please tell me if this is possible for you to give me some tips, or
>>>>>>>               
> if
>   
>>>>>>>             
>>>>>>>               
>> it takes too much of your time just advice me some lectures
>>   
>>     
>>>>>>> Best regards,
>>>>>>>
>>>>>>> De Pauw Antoine
>>>>>>>   
>>>>>>>       
>>>>>>>             
>>>>>>>               
>>>>>> Antoine:  It would really help to have a script demonstrating your 
>>>>>> problem.  It sounds to me like you want to plot markers representing a
>>>>>>             
>
>   
>>>>>> set of points - for that you should use the scatter method.  pcolor, 
>>>>>> pcolormesh and friends are for plotting gridded data.
>>>>>>
>>>>>> -Jeff
>>>>>>     
>>>>>>           
>>>>>>             
>>>>>>>   
>>>>>>>       
>>>>>>>             
>>>>>>>               
>>>>>>>> De Pauw Antoine wrote:
>>>>>>>>     
>>>>>>>>         
>>>>>>>>               
>>>>>>>>                 
>>>>>>>>> Dear sir,
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> I&#8217;m currently trying to improve our plotting tools here at
>>>>>>>>>                   
> the
>   
>>>>>>>>>                 
>>>>>>>>>                   
>> &#8220;Quantum 
>>   
>>     
>>>>>>>>> Chemistry and Photophysics&#8221; section of the Université Libre
>>>>>>>>>                   
> de
>   
>>>>>>>>>                 
>>>>>>>>>                   
>>   
>>     
>>>>>>>>> Bruxelles, and I ran, after many time passed at searching for a 
>>>>>>>>> solution, on an explanation from you here: 
>>>>>>>>>
>>>>>>>>>                 
>>>>>>>>>                   
>> http://www.nabble.com/Re:-matplotlib-basemap-question-tt17759370.html
>>   
>>     
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> It seems that you could help me find a solution, as I cannot plot
>>>>>>>>>                 
>>>>>>>>>                   
>> any 
>>   
>>     
>>>>>>>>> points on maps.
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> Could you please tell me what I could do to plot data in a simple
>>>>>>>>>                 
>>>>>>>>>                   
>> way, 
>>   
>>     
>>>>>>>>> assuming I have 3 unordered arrays containing respectively
>>>>>>>>>                   
> latitude,
>   
>>>>>>>>>                 
>>>>>>>>>                   
>>   
>>     
>>>>>>>>> longitude and values to plot?
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> Some tips would be very nice from you as any method I have tried so
>>>>>>>>>                 
>>>>>>>>>                   
>> far 
>>   
>>     
>>>>>>>>> give me some errors&#8230;
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> Thank you very much in advance,
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> PS: I give you the code I&#8217;m using currently, missing the
>>>>>>>>>                 
>>>>>>>>>                   
>> plotting part
>>   
>>     
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> from mpl_toolkits.basemap import Basemap
>>>>>>>>>
>>>>>>>>> from numpy import *
>>>>>>>>>
>>>>>>>>> from scipy.io.numpyio import fread
>>>>>>>>>
>>>>>>>>> import matplotlib.pyplot as plt
>>>>>>>>>
>>>>>>>>> import numpy as np
>>>>>>>>>
>>>>>>>>> import os
>>>>>>>>>
>>>>>>>>> import sys
>>>>>>>>>
>>>>>>>>> import array
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> fileName="c:/20080821.b56"
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> print('preparing map')   
>>>>>>>>>
>>>>>>>>> map = 
>>>>>>>>>
>>>>>>>>>                 
>>>>>>>>>                   
> Basemap(projection='mill',lat_0=0,lon_0=0,resolution='i',area_thresh=30000.)
>   
>>   
>>     
>>>>>>>>> map.drawcoastlines(0.5,antialiased=1)
>>>>>>>>>
>>>>>>>>> map.drawmapboundary()
>>>>>>>>>
>>>>>>>>> #map.drawmeridians(np.arange(-180,180,60),linewidth=0.5, 
>>>>>>>>> labels=np.arange(-180,180,60), labelstyle="+/-")
>>>>>>>>>
>>>>>>>>> #map.drawparallels(np.arange(-90,90,30), linewidth=0.5, 
>>>>>>>>> labels=np.arange(-180,180,30), labelstyle="+/-")
>>>>>>>>>
>>>>>>>>> print('reading binary data')
>>>>>>>>>
>>>>>>>>> nbreligne=long(os.stat(fileName)[6])/(8*int(fileName[-2:]))
>>>>>>>>>
>>>>>>>>> Lat=zeros(nbreligne)
>>>>>>>>>
>>>>>>>>> Lon=zeros(nbreligne)
>>>>>>>>>
>>>>>>>>> Val=zeros(nbreligne)
>>>>>>>>>
>>>>>>>>> rawfile=fromfile(open(fileName,'rb'),'d',-1)       
>>>>>>>>>
>>>>>>>>> Lat=rawfile[0:nbreligne]
>>>>>>>>>
>>>>>>>>> Lon=rawfile[nbreligne:nbreligne*2]
>>>>>>>>>
>>>>>>>>> Val=rawfile[nbreligne*21:nbreligne*22]
>>>>>>>>>
>>>>>>>>> print('shifting latitudes and projecting to map')
>>>>>>>>>
>>>>>>>>> i=0
>>>>>>>>>
>>>>>>>>> while i < nbreligne:
>>>>>>>>>
>>>>>>>>>     if(Lon[i]>180):
>>>>>>>>>
>>>>>>>>>         print(Lon[i])
>>>>>>>>>
>>>>>>>>>         Lon[i]-=360
>>>>>>>>>
>>>>>>>>>         print(Lon[i])
>>>>>>>>>
>>>>>>>>>     i+=1
>>>>>>>>>
>>>>>>>>> print('plotting data')
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> #plotting code comes here
>>>>>>>>>       
>>>>>>>>>           
>>>>>>>>>                 
>>>>>>>>>                   
>>>>>>>> Antoine:  If you send me a self-contained script that produces the 
>>>>>>>> problem you see, I can help you debug it.  As it stands now, I have
>>>>>>>>               
>>>>>>>>                 
>> very 
>>   
>>     
>>>>>>>> little to work with - it could be your plotting commands, or it
>>>>>>>>                 
> could
>   
>>>>>>>>               
>>>>>>>>                 
>> be 
>>   
>>     
>>>>>>>> your data.
>>>>>>>>
>>>>>>>> -Jeff
>>>>>>>>     
>>>>>>>>         
>>>>>>>>               
>>>>>>>>                 
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> print('saving map')       
>>>>>>>>>
>>>>>>>>> plt.savefig("testfig.png",dpi=600)
>>>>>>>>>
>>>>>>>>> print('done')
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>> *Antoine De Pauw*
>>>>>>>>> Collaborateur de recherches, Informatique - Research collaborator,
>>>>>>>>>                 
>>>>>>>>>                   
>> IT
>>   
>>     
>>>>>>>>> Laboratoire de chimie quantique et photophysique - Quantum
>>>>>>>>>                   
> chemistry
>   
>>>>>>>>>                 
>>>>>>>>>                   
>> and 
>>   
>>     
>>>>>>>>> photophysics laboratory
>>>>>>>>> *Université Libre de Bruxelles - ULB <http://ww.ulb.ac.be/>*
>>>>>>>>>
>>>>>>>>>  
>>>>>>>>>
>>>>>>>>>       
>>>>>>>>>           
>>>>>>>>>                 
>>>>>>>>>                   
>>>>>>>> -- 
>>>>>>>> Jeffrey S. Whitaker         Phone  : (303)497-6313
>>>>>>>> Meteorologist               FAX    : (303)497-6449
>>>>>>>> NOAA/OAR/PSD  R/PSD1        Email  : [EMAIL PROTECTED]
>>>>>>>> 325 Broadway                Office : Skaggs Research Cntr 1D-113
>>>>>>>> Boulder, CO, USA 80303-3328 Web    : http://tinyurl.com/5telg
>>>>>>>>
>>>>>>>>
>>>>>>>>     
>>>>>>>>         
>>>>>>>>               
>>>>>>>>                 
>>>>>>>   
>>>>>>>       
>>>>>>>             
>>>>>>>               
>>>>>> -- 
>>>>>> Jeffrey S. Whitaker         Phone : (303)497-6313
>>>>>> NOAA/OAR/CDC  R/PSD1        FAX   : (303)497-6449
>>>>>> 325 Broadway                Boulder, CO, USA 80305-3328
>>>>>>
>>>>>>
>>>>>>
>>>>>>     
>>>>>>           
>>>>>>             
>>>>>   
>>>>>         
>>>>>           
>>>> -- 
>>>> Jeffrey S. Whitaker         Phone : (303)497-6313
>>>> NOAA/OAR/CDC  R/PSD1        FAX   : (303)497-6449
>>>> 325 Broadway                Boulder, CO, USA 80305-3328
>>>>
>>>>
>>>>
>>>>       
>>>>         
>>>     
>>>       
>>   
>>     
>
>
>   


-- 
Jeffrey S. Whitaker         Phone : (303)497-6313
NOAA/OAR/CDC  R/PSD1        FAX   : (303)497-6449
325 Broadway                Boulder, CO, USA 80305-3328


-------------------------------------------------------------------------
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

Reply via email to