I've set up the data file with comma delimiter and one space.  Split command 
now:

(lat,lon)=line.strip().split(',')

Code runs without error but no points on the map.  These two lines, however, do 
produce an asterisk at the proper location:

xpt,ypt = m(-75.0,43.0)
text(xpt,ypt,'*') 

I will strip the code down to bare minimum (take out reading of netCDF data 
file) and paste it here along with ten example lats,lons.

--- On Tue, 4/19/11, Ian Bell <ib...@purdue.edu> wrote:

From: Ian Bell <ib...@purdue.edu>
Subject: Re: [Matplotlib-users] plotting points/locations from data file
To: "Michael Rawlins" <rawlin...@yahoo.com>
Cc: Matplotlib-users@lists.sourceforge.net
Date: Tuesday, April 19, 2011, 7:32 PM

The easiest solution would be to put a comma as the delimiter between the lat 
and lon, and then change split(' ') to split(',').  Then everything should work 
fine.  I exclusively work with comma separated files for this exact reason.  
You are right that I had a typo, it should be lons[i].  It looks like you have 
two spaces as the delimiter currently based on your copy-paste.  That's why 
split doesn't give you two values.  In general I recommend that you avoid two 
spaces as the delimiter, just going to cause problems.


----
Ian Bell
Graduate Research Assistant
Herrick Labs
Purdue University
email: ib...@purdue.edu
cell: (607)227-7626



On Tue, Apr 19, 2011 at 7:26 PM, Michael Rawlins <rawlin...@yahoo.com> wrote:



Sorry I should have mentioned that longitudes are negative; there is a '-' 
before each longitude, like so:



39.4670  -76.1670 
46.4000  -74.7670 
45.3830  -75.7170 
43.6170  -79.3830 
45.5170  -73.4170 


Also the plt.text line you sent had lon[i] rather than lons[i].  I corrected 
that and changed my longitudes to not have the '-' sign and the code ran 
without error. Could the '-' be causing a problem?  I need to input the lat, 
lon as in the file as shown above.



Mike

--- On Tue, 4/19/11, Ian Bell <ib...@purdue.edu> wrote:



From: Ian Bell <ib...@purdue.edu>
Subject: Re: [Matplotlib-users] plotting points/locations from data file
To: "Michael Rawlins"
 <rawlin...@yahoo.com>
Cc: Matplotlib-users@lists.sourceforge.net
Date: Tuesday, April 19, 2011, 7:22 PM



If you want to plot a given marker at the point, for instance a circle, replace 
the last line of my code plt.text...... with 

plt.plot(lats,lons,'o')

for a circle, or 



plt.plot(lats,lons,'s')



for a square.  Refer to Plot for more information on the markers you can use.  
You are getting the error because you have a delimiter different than a single 
space, so it isn't splitting the line.  Replace ' '  in the split command with 
your whitespace delimiter.  Is it a tab? Then you want '\t' .





Good luck,
Ian

----
Ian Bell
Graduate Research Assistant
Herrick Labs
Purdue University
email: ib...@purdue.edu


cell: (607)227-7626



On Tue, Apr 19, 2011 at 7:14 PM, Michael Rawlins <rawlin...@yahoo.com> wrote:





Yes, there is whitespace between each lat and lon on each line.  But, actually, 
I'd simply like to plot a dot at each location.  The '1' was there in my 
example because I do not yet know how to plot a particular symbol.  Here is 
what I got when I tried the code you just suggested. 





Traceback (most recent call last):
  File "test.py", line 319, in <module>
    (lat,lon)=line.strip().split(' ')
ValueError: too many values to unpack




There are 203 records in the data file.  Line 319 of test.py is this:

(lat,lon)=line.strip().split(' ')


--- On Tue, 4/19/11, Ian Bell <ib...@purdue.edu> wrote:





From: Ian Bell <ib...@purdue.edu>


Subject: Re:
 [Matplotlib-users] plotting points/locations from data file
To: "Michael Rawlins" <rawlin...@yahoo.com>
Cc: Matplotlib-users@lists.sourceforge.net




Date: Tuesday, April 19, 2011, 6:52 PM

To clarify, you are trying to read in a set of (lat,lon) points in a file that 
is space delimited, store the data, and then put a text marker at each point, 
with each point numbered in order?  The critical part is that you want to use a 
list (or numpy array) instead of a dictionary.  Something like this ought to do 
(don't have MPL on this computer though - pretty sure this should work):







lines=open('file.txt','r').readlines()
(lats,lons)=([],[])
for line in lines:
    (lat,lon)=line.strip().split(' ')
    lats.append(float(lat))
    lons.append(float(lon))







for i in range(len(lons)):
    plt.text(lats[i],lon[i],str(i+1),ha='center',va='center',color='white')

I'm sure there are a bunch of more compact ways to do this, but this should 
work.







Ian
----
Ian Bell
Graduate Research Assistant
Herrick Labs
Purdue University
email: ib...@purdue.edu




cell: (607)227-7626



On Tue, Apr 19, 2011 at 4:09 PM, Michael Rawlins <rawlin...@yahoo.com> wrote:








I'm trying to plot a series of points/locations on a map. I'm reading the 
latitudes and longitudes from a file, with each lat, lon pair on each record 
(line).  Here is the code:



def make_float(line):

    lati, longi = line.split()

    return float(lati), float(longi)



my_dict = {}

with open("file.txt") as f:

    for item in f:

        lati,longi = make_float(item)

        my_dict[lati] = longi



xpt,ypt = m(-76.1670,39.4670 )

plt.text(xpt,ypt,'1',color='white')



#print my_dict



The matplotlib code which I've previously used to plot a single point on the 
map is below, with longitude and latitude in ( ):



xpt,ypt = m(-70.758392,42.960445)

plt.text(xpt,ypt,'1',color='white')



When replacing (-70.758392,42.960445) with (longi,lati), the code plots only a 
single '1' at the location of just the last coordinate pair in the file. So now 
I only need to plot them all. Does the code I've implemented have an implicit 
loop to it?









Mike







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

Benefiting from Server Virtualization: Beyond Initial Workload

Consolidation -- Increasing the use of server virtualization is a top

priority.Virtualization can reduce costs, simplify management, and improve

application availability and disaster protection. Learn more about boosting

the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

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







------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to