Before we get started, I’d like to point everyone to an excellent tutorial here by Kim Gilbert on making maps in R. I have been grappling with overlaying admixture plots, and migration routes on top of maps recently, and thought I’d put together a quick tutorial on that
What you will need:
1. GPS coordinates
Eg. gps.data
ID,Lat,Lon 1,33.72,-94.40 2,34.1682185,-111.930907 3,37.2718745,-119.2704153
2. Admixture proportions
Admixture proportions – these are routinely printed out as the “Q” matrix by STRUCTURE, and in a file suffixed with a “Q” by ADMIXTURE. I added a column with sample sizes to this, to proportionately resize the admixture pies.
Eg. admixprops.data
K1,K2,Num 0.836601,0.163399,12 0.565904,0.434096,16 0.508735,0.491265,18 0.111114,0.888886,9
3. The maps() and plotrix() packages in R
#Initialize packages
library(maps)
library(plotrix)
gps <- read.csv(“gps.data”,header=TRUE) #Read input files
admix <- read.csv(“admixprops.data”,header=TRUE)
map(”state”) #Plot maps
map.axes() #Add axes
points(gps$Lon, gps$Lat,
cex = admix$Num/5, col=’red’, pch=19) #To add just points
for (x in 2:nrow(gps)) { #To add arrows for migration models
arrows(gps$Lon[1],gps$Lat[1],gps$Lon[x],
gps$Lat[x],lty=”dashed”,code=2)
} #To add admixture plots – here I used K = 2.
for (x in 1:nrow(gps)) { floating.pie(gps$Lon[x],gps$Lat[x], #You can modify your loop to reflect this
c(admix$K1[x],admix$K2[x]),radius=admix$Num[x]/8,
col=c("red","blue") }
And voila! What took me four lines of code in R, involved days of learning ArcGIS to do the same thing (not to undermine the way cooler things that you can do with ArcGIS). I’ve been playing around with adding a phylogenetic tree to the admixture map as well using the ape package – more to come on this soon!