Visualizing Earth's Population via a Kernel Approach
Visualization is a common way to convey complex information. Here, I use a kernel-based algorithm to draw population density along latitudinal and longitudinal axes.
Join the DZone community and get the full member experience.
Join For FreeThere was an interesting map on reddit this morning: a visualisation of latitude and longituge of where people live, on Earth.
So I tried to reproduce it. To compute the density, I used a kernel-based approach:
> library(maps)
> data("world.cities")
> X=world.cities[,c("lat","pop")]
> liss=function(x,h){
+ w=dnorm(x-X[,"lat"],0,h)
+ sum(X[,"pop"]*w)
+ }
> vx=seq(-80,80)
> vy=Vectorize(function(x) liss(x,1))(vx)
> vy=vy/max(vy)
> plot(world.cities$lon,world.cities$lat,)
> for(i in 1:length(vx))
+ abline(h=vx[i],col=rgb(1,0,0,vy[i]),lwd=2.7)
For the other axis, we use a miror technique, to ensure that -180 is close the +180
> Y=world.cities[,c("long","pop")]
> Ya=Y; Ya[,1]=Y[,1]-360
> Yb=Y; Yb[,1]=Y[,1]+360
> Y=rbind(Y,Ya,Yb)
> liss=function(y,h){
+ w=dnorm(y-Y[,"long"],0,h)
+ sum(Y[,"pop"]*w)
+ }
> vx=seq(-180,180)
> vy=Vectorize(function(x) liss(x,1))(vx)
> vy=vy/max(vy)
> plot(world.cities$lon,world.cities$lat,pch=19)
> for(i in 1:length(vx))
+ abline(v=vx[i],col=rgb(1,0,0,vy[i]),lwd=2.7)
Now we can add the two, on the same graph:
Published at DZone with permission of Arthur Charpentier, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments