郡内の病気の頻度に応じて、n 個の正方形で地理マップをプロットしたいと思います。ここのように:
しかし、R や qGIS でこれを行う方法がわかりませんでした。助けてくれてありがとう。
最初に、(「rect」を使用して) スタックの正方形を適切な場所にプロットする「stackbox」という小さな関数を作成します。
その関数の最初の行は次のとおりです。
stackbox <- function(x,y,n,size,maxheight=5){
次に、症例のある郡ごとにその関数を呼び出します。
プロセスのどこで行き詰まりましたか?
完全な機能は次のとおりです。
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,...)
}
}
例:
plot(1:10)
for(i in 1:10){
stackbox(i,i,i,3,size=.1,col="red",border="white")
}
マップ上でこれを行うには、sp および maptools パッケージと、データを含むシェープファイルまたはその他の地理空間データ ソースが必要です。
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")
}
}
オリジナルに近い色を選んでみました。ボックスはプロット座標にあることに注意してください。そのため、0.1 度にする必要がありました。(package:gdal の spTransform を使用して) マップをユークリッド投影に変換すると、それらの単位で適切に正方形になります。
ただし、オリジナルのように素敵なテキストラベルを作成するのは難しいでしょう...
別の方法として、ポイント ジオメトリを使用して ggplot2 を使用して非常に簡単に作成できるバブル プロットをお勧めします。ヘルプページの例 ( http://had.co.nz/ggplot2/geom_point.html ):
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(aes(size = qsec))
これは次のことにつながります。
気泡の大きさは測定量を表しています。この例では地理座標を使用していませんが、簡単に使用できます。ggplot2 パッケージは、geom_path などを使用して、空間ポリゴンを追加レイヤーとして追加することもサポートしています。coord_mapのヘルプ ファイルには、マップ データを使用したいくつかの例が示されています。SpatialPolygons オブジェクトを data.frame (ggplot2 に必要) に変換する fortify 関数も参照してください。