[R] help to make a map on R
Don MacQueen
macq at llnl.gov
Thu Oct 3 16:55:35 CEST 2002
If I understand the question correctly, the solution is simpler than
some of the other suggestions. Here is what I would do.
First, here is an example data file:
traj lat long
T 2.1 3.4
T 4.2 5.1
T 3.6 6.2
T 4.2 5.1
T 11.4 12.3
T 13.2 14.8
T 9.3 11.2
T 19.4 20.3
T 21.3 16.8
T 22.3 15.6
T 23.1 14.4
T 34.2 32.3
T 39.2 34.8
T 39.3 31.2
Next, here is a script to make the plot:
## read the data (the delimiter is tab character in this example)
dat <- read.delim('junk.dat',colClasses=c('character','numeric','numeric'),
blank.lines.skip=FALSE)
## change "T" to "T1", "T2" etc.
rl <- rle(dat$traj)
dat <- dat[dat$traj != '',]
lens <- rl$lengths[rl$lengths != 1]
dat$traj <- paste(dat$traj,
rep(1:lens),lens),
sep='')
## function for plotting lines
lfun <- function(df) lines(df$long,df$lat)
## prepare an empty plot with the correct range
ylm <- range(dat$lat)
xlm <- range(dat$long)
plot(xlm,ylm,type='n')
## add the lines to the plot, one line for each trajectory
lapply(split(dat,dat$traj),lfun)
Since you have about 3000 trajectories, the lapply() step may take a long time.
The essential steps are the use of the rle() and rep() functions.
That, and including the blank lines while reading the data file.
Very important warning: this method assumes that whenever there is a
blank line there is only one blank line. Never two or more blank
lines next to each other.
I hope this helps
-Don
At 4:26 PM -0300 10/2/02, Ronaldo Reis Jr. wrote:
>Hi all,
>I need a little help for construct an state's map on R.
>
>The first problem is to get the data.
>
>I have a datafile of longitude and latitude in the follow format:
>
>trajectory latitude longtude
>T -22.045618 -51.287056
>T -22.067078 -51.265888
>T -22.067039 -51.207249
>
>T -22.059690 -48.089695
>T -22.075529 -48.074608
>T -22.072460 -48.044472
>
>T -22.062767 -48.298473
>T -22.077349 -48.322140
>T -22.047001 -48.347443
>T -22.054266 -48.369331
>T -22.042810 -48.392612
>T -22.064812 -48.422195
>T -22.062544 -48.443497
>
>To read a file is simple, but I need that R change the value of
>trajectory after a blank line, reading something like this:
>
>trajectory latitude longitude
>T1 -22.045618 -51.287056
>T1 -22.067078 -51.265888
>T1 -22.067039 -51.207249
>T2 -22.059690 -48.089695
>T2 -22.075529 -48.074608
>T2 -22.072460 -48.044472
>T3 -22.062767 -48.298473
>T3 -22.077349 -48.322140
>T3 -22.047001 -48.347443
>T3 -22.054266 -48.369331
>T3 -22.042810 -48.392612
>T3 -22.064812 -48.422195
>T3 -22.062544 -48.443497
>
>Each trajectory is a line that is a little piece of my map.
>
>After this, to make a map I execute:
>
>tapply() for separate the coordinates for each trajectory, something like
>this:
>
>> longitude <- tapply(longitude,trajectory,c)
>> longitude
>$T1
>[1] -51.2871 -51.2659 -51.2072
>
>$T2
>[1] -48.0897 -48.0746 -48.0445
>
>$T3
>[1] -48.2985 -48.3221 -48.3474 -48.3693 -48.3926 -48.4222 -48.4435
>
>> latitude <- tapply(latitude,trajectory,c)
>> latitude
>$T1
>[1] -22.0456 -22.0671 -22.0670
>
>$T2
>[1] -22.0597 -22.0755 -22.0725
>
>$T3
>[1] -22.0628 -22.0773 -22.0470 -22.0543 -22.0428 -22.0648 -22.0625
>
>The nest step is to make a plot with the coordinates.
>
>> plot(longitude,latitude, asp = 1, type = "n")
>
>And finally plot the lines for each trajectory, and all lines together,
>make a Sao Paulo's map and your cities limits.
>
>> lines(longitude$T1,latitude$T1)
>> lines(longitude$T2,latitude$T2)
>> lines(longitude$T3,latitude$T3)
>
>How can I make to automatized this process? Because I can about 3000
>trajectory.
>
>Any other idea for make this is welcome.
>
>
>Thanks for all
>
>Inte mais
>Ronaldo
--
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA
--------------------------------------
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list