转:http://site.douban.com/182577/widget/notes/10567181/note/262669861/
全国大学生数学建模竞赛2011A。插值。
题目和数据:http://www.mcm.edu.cn/html_cn/node/a1ffc4c5587c8a6f96eacefb8dbcc34e.html
第一问是讨论8种重金属元素在城区的空间分布,并分析不同区域的污染程度。
描述空间分布比较好的方式是把这个空间以图形的方式展示出来。
对整个城区面积来说,300多个采样点的数据过少,可用插值拟合的方法获得各重金属污染物浓度的空间分布。再参考由背景值确定的阈值,定量分析城区各区域的污染程度。
由于空间数据是不规则的,较好的方法是用散乱数据插值,线性插值的效果不好。
下面采用kriging插值:http://en.wikipedia.org/wiki/Kriging。
mum<-read.csv('mum2011.csv')#把数据附件1,2合并,存为mum2011.csv
library(kriging)
kriged <- kriging(mum$x, mum$y, mum$hight, pixels=100)#对海拔进行差值
map<-kriged$map
library(ggplot2)
v <- ggplot(map, aes(x, y, z = pred))#绘制海拔图,在其上标识功能区,pred是海拔插值的结果
v + geom_tile(aes(fill = pred))+
stat_contour(binwidth = 20)+
scale_fill_gradientn(colours=c('darkgreen','green','orange','yellow','white'))+
annotate("text",x=mum$x,y=mum$y,label=mum$area)
功能区分别是
1 生活区
2 工业区
3 山区
4 交通区
5 公园绿地区
krigedcu <- kriging(mum$x, mum$y, mum$Cu, pixels=100)#对铜的浓度插值
mapcu<-krigedcu$map
v <- ggplot(mapcu, aes(x, y, z = pred))#绘铜的浓度图
v + geom_tile(aes(fill = pred))+
stat_contour(binwidth = 100)+
scale_fill_gradientn(colours=c('blue','green','orange','yellow','red'))+
annotate("text",x=mum$x,y=mum$y,label=mum$area)
其他重金属类似作图即可。结合海拔和功能区,不难描述污染的情况。
R里边常用的绘制等高线图的函数是contour( ),这个函数要求坐标x,y值递增,对散乱数据不合适,所以采用ggplot2来画图。