A phytools blog reader asks:
“Is it possible to add latitude and longitude tick marks with this function phylo.to.map?”
The answer is - yes. Well, at least we can adjust the margins to include x & y axes (which are on the scale of lat. & long.), and (if we want to) we can even overlay lines of latitude & longitude on the plot. Here's how:
## first simulate a tree & some data:
library(phytools)
tree<-pbtree(n=26,scale=100,tip.label=LETTERS)
lat<-fastBM(tree,sig2=10,bounds=c(-36,-16),a=-20)
long<-fastBM(tree,sig2=80,bounds=c(115,150),a=130)
loc<-cbind(lat,long)
loc
## lat long
## A -30.00298 136.8887
## B -29.52615 139.2913
## C -21.94540 117.6450
## D -21.44360 137.3063
## E -30.69070 129.6878
## F -27.91373 138.7563
## G -21.24415 119.6728
## H -19.85676 138.0375
## I -29.70913 143.8215
## J -32.41438 130.5098
## K -34.28836 127.8772
## L -32.97290 135.9813
## M -26.05441 145.2799
## N -23.89187 124.5674
## O -17.84134 140.5776
## P -28.67361 138.5719
## Q -16.77305 128.0718
## R -26.44700 140.7354
## S -24.02262 139.6478
## T -35.53304 136.3906
## U -30.89431 139.9094
## V -19.50736 149.8240
## W -21.92831 149.1358
## X -18.30595 138.6660
## Y -19.17043 140.1686
## Z -22.59701 132.3479
Now, with these (made-up) data in hand, let's create our plot & customize it:
## now plot projection
phylo.to.map(tree,loc,ylim=c(-40,-10), xlim=c(110,155),
mar=c(5.1,4.1,2.1,2.1))
## objective: 180
## objective: 172
## objective: 172
## objective: 172
## objective: 168
## objective: 168
## objective: 168
## objective: 154
## objective: 140
## objective: 140
## objective: 140
## objective: 140
## objective: 140
## objective: 138
## objective: 138
## objective: 134
## objective: 134
## objective: 134
## objective: 134
## objective: 134
## objective: 134
## objective: 126
## objective: 126
## objective: 126
## objective: 126
## create the axes
long.lines<-seq(110,160,by=10)
lat.lines<-seq(-40,-10,by=10)
axis(1,at=long.lines)
axis(2,at=seq(-40,-10,by=5))
## add gridlines
for(i in 1:length(lat.lines))
lines(c(par()$usr[1],160),rep(lat.lines[i],2),lty="dotted",
col="#00000040")
for(i in 1:length(long.lines))
lines(rep(long.lines[i],2),c(par()$usr[3],-10),lty="dotted",
col="#00000040")
lines(c(par()$usr[1],160),rep(-23,43333,2),lwd=2,col="#00000080")
text(105,-23.5,"Tropic of Capricorn",cex=0.7,pos=4)
title(xlab="longitude")
title(ylab="latitude ")
Well, you get the idea.
I'm trying to plot the graph through data without simulations. At the end of the plot generation process an error occurs. (Error in xy.coords (x, y) 'x' and 'y' lengths differ).
ReplyDeleteHow can I do this plot?
Follow the step by step I'm running:
> Require (phytools)
> Library (rworldmap)
> Tree <- read.tree ("/ home / cleysinho / begomodw / view / file / FastTreeMPTueJul2116: 34: 222015.tree")
> Source ("/ home / cleysinho / begomodw / view / file / phylo.to.map.R")
> Lat_log = read.table ("FASTATueJul2117_41_462015.txt_lat_log.txt", sep = "\ t")
> Data <- (lat_log [2: 3])
> Rownames (date) <- lat_log [, 1]
> COLNAMES (date) <- c ("lat", "long")
> Date
lat long
FJ538207 -38.41610 -63.61667
KJ742419 -38.41610 -63.61667
JX863082 -23.89924 -51.22822
JX863081 -23.74301 -51.31422
KC683374 -23.44250 -58.44383
AY090558 -20.75640 -42.87458
NC_004639 -14.23500 -51.92528
JX871385 -14.23500 -51.92528
JX871384 -14.23500 -51.92528
JX871388 -14.23500 -51.92528
EU710750 -20.85773 -42.80155
KC706538 -20.81462 -42.87776
EU710749 -22.43139 -43.42895
JN848772 6.42375 -66.58973
KJ174330 18.73569 -70.16265
KC004097 -14.23500 -51.92528
JF694482 -12.57974 -41.70073
> Phylo.to.map (tree, date)
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
objective: 0
Error in xy.coords (x, y) 'x' and 'y' lengths differ
Thanks, Cleydson