admin 发表于 2015-7-14 17:24:47

R-中国地图

一、调用相关包install.packages(c("maps", "mapdata","sp“,"maptools"))
library(maps)
library(mapdata)
library(sp)
library(maptools)
map("china")
x=readShapePoly('D:/工作文件夹/R语言与中国地图/chinaprovinceborderdata_tar_gz/bou2_4p.shp')
plot(a)
plot(a,col=gray(924:0/924))

getColor=function(mapdata,provname,provcol,othercol)
{
f=function(x,y) ifelse(x %in% y,which(y==x),0);
colIndex=sapply(mapdata@data$NAME,f,provname);
col=c(othercol,provcol);
return(col);#读取数据
b<-read.table("D:/工作文件夹/R语言与中国地图/population.txt",head=T)
provname<-as.matrix(b[,2])
pop<-as.matrix(b[,3])
provcol=rgb(red=1-pop/max(pop)/10,green=1-pop/max(pop)/2,blue=0.2)
plot(x,col=getColor(x,provname,provcol,"white"),xlab="",ylab="")

二、利用google数据 library(googleVis) #类似的包还有ggmap 等

b<-read.table("D:/工作文件夹/R语言与中国地图/population.txt",head=T)

G3 <- gvisGeoChart(b, locationvar='ISO代码',
colorvar='人口数量',options=list(region='CN',
displayMode="regions",resolution="provinces",
colorAxis="{colors: ['yellow','red']}" ))

plot(G3)
http://cos.name/2009/07/drawing-china-map-using-r/http://www.dataguru.cn/article-3062-1.html参考网站
http://platform.eeeeee.org/info/country/省份数据
三、中国航线地图library(maptools)
x=readShapePoly('D:/工作文件夹/R语言与中国地图/chinaprovinceborderdata_tar_gz/bou2_4p.shp')
plot(x)
getColor=function(mapdata,provname,provcol,othercol)
{
f=function(x,y) ifelse(x %in% y,which(y==x),0);
colIndex=sapply(mapdata@data$NAME,f,provname);
col=c(othercol,provcol);
return(col);}
#自定义函数

Par(mar(0,0,1,0),bg=”gray”)
plot(x,col="black",border="black")


#航线数据处理
library(stringr)

data.port<-read.csv('D:\\工作文件夹\\R语言与中国地图\\airports.dat',F)
data.line<-read.csv('D:\\工作文件夹\\R语言与中国地图\\ routes.dat',F)
chinaport<-str_detect(data.port[,'V4'],"China")
chinaport <- data.port
chinaport<-chinaport names(chinaport)<-c('city','code','lan','lon','att')
chinaport

# 找出国内航班
lineinchina <- (data.line[,'V3'] %in% chinaport$code) & (data.line[,'V5'] %in% chinaport$code)

chinaline <- data.line
names(chinaline)<-c('f','t','a’)

#构建一个函数,根据机场编码得到经纬度
findposition <- function(code) {
    find <- chinaport$code==code
    x <- chinaport
    y <- chinaport
    return(data.frame(x,y))
}

# 将机场编码转为经纬度
from <- lapply(as.character(chinaline$source),findposition)
from <- do.call('rbind',from)
from$group <- 1:dim(from)
names(from) <- c('lon','lan','group')

to <- lapply(as.character(chinaline$destination),findposition)
to <- do.call('rbind',to)
to$group <-1:dim(to)
names(to) <-c('lon','lan','group')
data.line <- rbind(from,to)
temp<- data.line


#作图
par(bg=”gray”)
plot(x,col="black",border="black")
points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)

for(i in 1:5832){segments(data.line, data.line, data.line,data.line, col= 'blue')
}

for(i in 1:100){ gcIntermediate (data.line, data.line, data.line,data.line)
}ggmap(get_googlemap(center = 'china', zoom=4,
                  maptype='roadmap'),extent='device')+
    geom_point(data=chinaport,aes(x=lon,y=lan),
               colour = 'red',alpha=0.8)+
    geom_line(data=data.line,aes(x=lon,y=lan,group=group),
            size=0.1,alpha=0.05,color='blue')

par(bg=”gray”)
plot(x,col="black",border="black")
points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.2)

for(i in 1:1000){segments(data.line, data.line, data.line,data.line, col= 'blue' )
}
#弧线及其颜色处理
library(maps)
library(maptools)
library(geosphere)
map("china",col="gray20",bg="black",mar=c(0,0,0,0))
title("中国航线图", sub = " SimSun",
      cex.main =1, col.main= "gray",)
points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)

from <- lapply(as.character(linecount$source),findposition)
from <- do.call('rbind',from)
to <- lapply(as.character(linecount$destination),findposition)
to <- do.call('rbind',to)


map("china",col="gray20",bg="black",mar=c(0,0,0,0))
title("中国航线图", sub = " SimSun",
      cex.main =1, col.main= "gray",)
points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)
#颜色调整
library(RColorBrewer)
display.brewer.all(type = "seq")
display.brewer.all()

color<-brewer.pal(9,"PRGn")
color<-colors()

map("china",col="gray20",bg="black",mar=c(0,0,0,0))
title("中国航线图", sub = " SimSun", col.main= "gray",)
points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)


for(i in 1:1304)
{ n= ceiling(18/linecount)
lines(gcIntermediate(from, to, n=100,addStartEnd=T) ,col="blue")
}

R语言交流QQ群:99598210(欢迎加入)
页: [1]
查看完整版本: R-中国地图