2011-12-01 51 views
4

与符号的地理地图我想绘制与根据疾病的县内的频率平方的n个地理地图。像这样一个这里: enter image description here剧情根据频率

但我想不出如何用R或qGIS做到这一点。 感谢您的帮助。

+0

这是一种奇怪的一个,你确定的细胞不只是一个非常稀疏的网格,其中的颜色是因为该值蓝是否存在与否?这并不是说你想要在给定的点上绘制n个单元格,是吗?样本数据和关于数据的更多细节将会有所帮助,但是如果您只是想要一个“这样的”情节,那么真正基本的出发点是m < - matrix(sample(c(0,1),50 * 30,replace = TRUE ,prob = c(0.95,0.05)),50,30);图像(m,col = c(“白色”,“蓝色”)) – mdsumner

+0

每个块表示报告的事件数量,位置显示发生数量的位置。 –

+0

块或气泡的问题是观察者的定性反应之一。那就是:面积或直径是否与基础值成线性比例?许多人(包括当然包括Tufte)都写过这样的文章。 –

回答

7

先写了一个名为“stackbox”是图(使用“矩形”)的平方在正确的地方堆栈的小功能。

下面是该函数的第一行:

stackbox <- function(x,y,n,size,maxheight=5){ 
  • 其中“尺寸”是高度和盒的宽度,和“maxheight”让你有一个堆栈是5高或10高管他呢。

然后调用函数,该函数有案件每一个县。

确切位置在哪里是你在这个过程中卡住?

下面是完整的功能:

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包,和一个shapefile或其他地理空间数据源中有你的数据:

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") 
    } 
} 

Map using stacked boxes

我挑选,看上去有点像你原来的颜色。请注意,这些箱子都是绘图坐标,所以我必须让它们达到0.1度。你可能希望将你的地图转换成一个欧几里得投影(使用来自包:gdal的spTransform),然后他们将在这些单位中并且正确地呈正方形。

做漂亮的文本标签就像你原来是棘手,虽然...

+0

谢谢你的回答。这非常棒。我把所有数据都作为shp文件,所以我可以做到这一点。在qGIS中,绘制名称并不难,我认为它也应该可以与R一起使用。需要的信息在shp文件中... – Dominik

+0

什么是您的readShapeSpatial命令中的mabLib条目?!? – Dominik

+0

这就是我保存我的地图文件的文件夹。 mapLib =“/ data/maps”对我来说可能是mapLib =“C:\\ maps \\”吗? file.path函数将形状文件名称的路径加入。 – Spacedman

5

作为替代方案,我建议一个气泡图,这是很容易使用GGPLOT2使用点几何之作。一个例子形成帮助页面(http://had.co.nz/ggplot2/geom_point.html):这导致

p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point(aes(size = qsec)) 

ggplot bubble plot

气泡的大小表示测得的量。该示例不使用地理坐标,但可以很容易地使用它们。 ggplot2软件包还支持添加空间多边形作为附加层,例如,使用geom_path。 coord_map的帮助文件显示了一些使用地图数据的示例。另请参阅fortify函数以将SpatialPolygons对象转换为data.frame(这是ggplot2所需的)。

+0

某人足够雄心勃勃的可以写映射x,y,大小,颜色的geom_stackbox()... –

+0

这将是一个选项。虽然我更喜欢boxplot更多... –

+0

我个人比较喜欢Paul的版本;这就是我通常这样做的方式。但是,我需要绘制所示示例中的数据...: - /有人知道如何使用ggplot做Spacedman示例吗? – Dominik