#江苏部分地图
rm(list=ls())
setwd("E:\\r\\za\\20120425-白老师的四件事")
#读入数据
dat4 = read.csv("tab4.csv",header=T, stringsAsFactors=F)
library(maptools)
xx2 <- readShapeLines("中国1:400万/中国地州界.shp") #这个数据有点老了。
###########################################
#取出地级市的名称和边界坐标
p.names = as.character(xx2[[1]]) #各地级市的名称及编号
p.names[p.names=="市辖区(南通市)"]="南通市"
p.names[p.names=="淮阴市"]="淮安市"
p.nams = dat4[[1]]
aii = c()
for(i in seq(along=p.nams)){
aii = (1:length(p.names))[p.names==p.nams]
}
aii[i+1] = (1:length(p.names))[p.names=="兴化市" ] #兴化市现在在泰州市内,与以前不一致
ti = (1:length(aii)) #1至市的个数 #取出各个市的经纬线
p.ai = list() #所需地区的经纬线
p.range.x = c() #横坐标范围
p.range.y = c() #纵坐标范围
for(i in ti){
ai = aii #在原数据库中的位置
ni = p.names[ai] #名称
p.ai[[ni]]= xx2@lines[[ai]]@Lines[[1]]@coords #取出相应城市的坐标,得到矩阵形式
p.range.x = range(p.ai[][,1], p.range.x)
p.range.y = range(p.ai[][,2], p.range.y)
} #处理泰州市和兴化市【此地图经纬线太老,需要手动处理】
x1 = p.ai$泰州市
x2 = p.ai$兴化市
t1.x = range(x1[,1], x2[,1])
t1.y = range(x1[,2], x2[,2])
x1.n = 1:length(x1[,1]) #用于编号
x2.n = 1:length(x2[,1]) #用于编号
plot(0, type="n", xlim = t1.x, ylim = t1.y,
xaxt="n", yaxt="n", bty="n", xlab="", ylab="")
text(x1[,1], x1[,2], x1.n )
text(x2[,1], x2[,2], x2.n, col=2 )
x3 = rbind(x2[1:31,], x1[2:59,], x2[40:57,])
polygon(x3)
p.ai$泰州市 = x3 ############----------------------------------------------------------
#绘图
#颜色函数
coli=function(x, mx, mi){
rgb((x-mi)/(mx-mi), (x-mi)/(mx-mi), (x-mi)/(mx-mi))
}
#... mx = 11
mi = 1 for(j in 2:4) {
layout( matrix(c(1,2,0,3), 2), height=c(1,4), width=c(6,1) )
#layout.show(3)
#第一个区域
par(mar=c(2,0,1,0))
x = sort(dat4[,j])
x.nam = dat4[order(dat4[,j]),1]
barplot(x, names.arg=x.nam, yaxt="n", bty="n", las=2,
col = coli(x,mx,mi))
###绘图
par(mar=c(1,0,1,0))
plot(0, type="n", xlim = p.range.x, ylim = p.range.y,
xaxt="n", yaxt="n", bty="n", xlab="", ylab="")
for(i in seq(along=dat4[,1]) ){
ni = dat4[i, 1] #某个市的名称
polygon(p.ai[[ni]], col=coli(dat4[i,j],mx,mi) )
}
for(i in seq(along=dat4[,1]) ){
ni = dat4[i, 1] #某个市的名称
text( mean(p.ai[][,1]), mean(p.ai[][,2]), ni )
}
text( p.range.x[1], p.range.y[1], names(dat4)[j], adj=c(0,0) )
#图例
par(mar=c(1,0,1,0))
t2 = mi+0:10*((mx-mi)/10)
plot(0 ,xlim=c(0,1), ylim=c(0,1), bty="n", xaxt="n",yaxt="n", type="n" )
rect( 0, 0:9/10, 0.5, 1:10/10, col=coli(t2,mx,mi)[-1] )
text( 0.8, 0:10/10, t2 )
} ############################下面不是程序#############
表
地区 | 2010 | 南京市 | 10.7 | 无锡市 | 9.54 | 徐州市 | 8.68 | 常州市 | 9.31 | 苏州市 | 9.61 | 南通市 | 8.64 | 连云港市 | 8.61 | 淮安市 | 8.53 | 盐城市 | 8.52 | 扬州市 | 8.79 | 镇江市 | 9.35 | 泰州市 | 8.41 | 宿迁市 | 8.1
|
|