From: Ian B. <ib...@pu...> - 2011-04-19 23:35:32
|
Have to say I whole-heartedly agree with Glenn. One problem I have run into is a funky file headers where I want to skip lines 1,2,3, and 4, but line 3 is my real header line which doesn't work so well with either of the below solutions. I had to write my own wrapper to deal with these weird types of files. Ian ---- Ian Bell Graduate Research Assistant Herrick Labs Purdue University email: ib...@pu... cell: (607)227-7626 On Tue, Apr 19, 2011 at 7:32 PM, G Jones <gle...@gm...> wrote: > You may find it easier to use mlab.csv2rec or numpy.loadtxt. > > e.g. > > data = csv2rec(filename,delimiter=' ') > plot(data[:,0],data[:,1],'o') > > > > On Tue, Apr 19, 2011 at 4:26 PM, Michael Rawlins <raw...@ya...>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...@pu...>* wrote: >> >> >> From: Ian Bell <ib...@pu...> >> Subject: Re: [Matplotlib-users] plotting points/locations from data file >> To: "Michael Rawlins" <raw...@ya...> >> Cc: Mat...@li... >> 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<http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.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...@pu... <http://mc/compose?to=ib...@pu...> >> cell: (607)227-7626 >> >> >> On Tue, Apr 19, 2011 at 7:14 PM, Michael Rawlins <raw...@ya...<http://mc/compose?to=raw...@ya...> >> > 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...@pu...<http://mc/compose?to=ib...@pu...> >> >* wrote: >> >> >> From: Ian Bell <ib...@pu... <http://mc/compose?to=ib...@pu...>> >> Subject: Re: [Matplotlib-users] plotting points/locations from data file >> To: "Michael Rawlins" <raw...@ya...<http://mc/compose?to=raw...@ya...> >> > >> Cc: Mat...@li...<http://mc/compose?to=Mat...@li...> >> 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...@pu... <http://mc/compose?to=ib...@pu...> >> cell: (607)227-7626 >> >> >> On Tue, Apr 19, 2011 at 4:09 PM, Michael Rawlins <raw...@ya...<http://mc/compose?to=raw...@ya...> >> > 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 >> Mat...@li...<http://mc/compose?to=Mat...@li...> >> 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 >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> >> > |