Plot a geographical map with symbols according to frequencies

I would like to plot a geographical map with n numbers of squares according to the frequency of a disease within a county. Like this one here:

But I couldn't figure out how to do this with R or qGIS. Thanks for y'all help.

Answers


First write a little function called 'stackbox' that plots (using "rect") the squares for the stack in the right place.

Here's the first line of that function:

stackbox <- function(x,y,n,size,maxheight=5){
  • where 'size' is the height and width of the boxes, and 'maxheight' lets you have a stack that is 5 high or 10 high or whatever.

Then call that function for every county that has cases.

Where exactly were you stuck in the process?

Here's the function in full:

stackbox <- function(x,y,n,size,maxheight=5,...){
  stackheight = seq(0,n,by=maxheight)
  stackheight=diff(unique(c(stackheight,n)))

  for(col in 1:length(stackheight)){
    xl=rep(x+(col-1)*size,stackheight[col]) - (length(stackheight)/2)*size
    yb=y+size*((1:stackheight[col])-1) - (max(stackheight)/2)*size
    xr=xl+size
    yt=yb+size
    rect(xl,yb,xr,yt,...)
  }
}

Example:

plot(1:10)
for(i in 1:10){
 stackbox(i,i,i,3,size=.1,col="red",border="white")
}

To do this on a map, you need the sp and maptools packages, and a shapefile or other geospatial data source that has your data in it:

africa=readShapeSpatial(file.path(mapLib,"africa.shp"))
plot(africa,border="gray")
coords=coordinates(africa)
for(i in 1:nrow(africa)){
  if(cases[i]>0){
    stackbox(coords[i,1],coords[i,2],africa$cases[i],1,border="#606060",col="#0083FE")
  }
}

I've picked colours that look a bit like your original. Note that the boxes are in plot coordinates, so I had to make them 0.1 of a degree. You may wish to transform your map to a euclidean projection (using spTransform from package:gdal) and then they'll be in those units and properly square.

Doing nice text labels like in your original would be tricky though...


Need Your Help

Html5 WebSql transaction behaves strangely with alert

javascript html5 transactions local-storage web-sql

The WebSql's transaction is behaving strangely when I put some alerts in the code. I have three transactions to do. These are t1,t2 and t3.

iOS singleton with static data

objective-c ios static singleton

I'm working with game center and wanted to have a singleton class for accessing the GK functionality which I've setup, but I then introduced a couple of methods which needed a delegate. Obviously