在科研工作中,经常会遇到需要在地图上展示数据的情况,今天分享一下如何使用R语言可视化地图数据
# 先安装和导入R包,这里使用了本地地图数据,所以只导入maps包即可 # install.packages("maps") library(maps) # 设置文件路径及导入数据,导入的china.rda数据会在文末链接分享 setwd("D:/1/小红书/R语言/画地图/") load("china.rda") # 把导入的数据赋值给china_map # 因为后续代码使用了china_map ,所以这里有一个赋值,也可以直接使用china作为变量名 china_map <- china # 这里是一个设置颜色的函数 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)[colIndex+1]; return(col); } #输出到默认路径,并命名为a.png png("a.png", width = 1000, height = 1000) # 设置展示的各个省份的名称 provname=c("北京市","天津市","河北省","山西省","内蒙古自治区", "辽宁省","吉林省","黑龙江省","上海市","江苏省", "浙江省","安徽省","福建省","江西省","山东省", "河南省","湖北省","湖南省","广东省", "广西壮族自治区","海南省","重庆市","四川省","贵州省", "云南省","西藏自治区","陕西省","甘肃省","青海省", "宁夏回族自治区","新疆维吾尔自治区","台湾省", "香港特别行政区"); # 与各个省份对应的要展示的数据 pop=c(36, 22, 14, 11, 11, 12, 100, 100, 0, 11, 71, 21, 11, 100, 18, 54, 18, 41, 38, 91, 0, 27, 60, 81, 69, 2, 60, 30, 54, 69, 10, 1, 20); # 因为需要绘制图例,所以这里设置了绘图的布局 nf <- layout(matrix(c(rep(1, 5), 0, rep(1, 5), 2, rep(1, 5), 0, rep(1, 5), 0, rep(1, 5), 0, rep(1, 5), 0),6,6,byrow=TRUE), widths =c(2,2,2,2,2,1), heights = c(1,2.5,1,1,1)) layout.show(nf) # 依旧是设置颜色 provcol=rgb(red=pop*2.55/255,green=1-pop*2.55/255,blue=0); # 绘图,这里绘制地图的主题部分 plot(china_map,col=getColor(china_map,provname,provcol,"white"), xlab="",ylab=""); # 设置省会城市坐标 dat = read.csv(text = "城市,jd,wd 北 京,116.4666667,39.9 上 海,121.4833333,31.23333333 天 津,117.1833333,39.15 重 庆,106.5333333,29.53333333 黑龙江,126.6833333,45.75 吉林,125.3166667,43.86666667 辽宁,123.4,41.83333333 内蒙古,111.8,40.81666667 河北,114.4666667,38.03333333 山西,112.5666667,37.86666667 山东,117,36.63333333 河南,113.7,34.8 陕西,108.9,34.26666667 甘肃,103.8166667,36.05 宁夏,106.2666667,38.33333333 青海,101.75,36.63333333 新疆,87.6,43.8 安徽,117.3,31.85 江苏,118.8333333,32.03333333 浙江,120.15,30.23333333 湖南,113,28.18333333 江西,115.8666667,28.68333333 湖北,114.35,30.61666667 四川,104.0833333,30.65 贵州,106.7,26.58333333 福建,119.3,26.08333333 台湾,121.5166667,25.05 广东,113.25,23.13333333 海南,110.3333333,20.03333333 广西,108.3333333,22.8 云南,102.6833333,25 西藏,91.16666667,29.66666667 香港,114.1666667,22.3 澳门,113.5,22.2") # 在各省份省会城市处标点及标出省份名称 points(dat$jd, dat$wd, pch = 19, col = rgb(0, 0, 0, 0.5)) text(dat$jd, dat$wd, dat[, 1], cex = 2, col = rgb(0,0, 0, 0.7), pos = c(2, 4, 4, 4, 3, 4, 2, 3, 4, 2, 4, 2, 2,4, 3, 2, 1, 3, 1, 1, 2 , 3, 2, 2, 1, 2, 4, 3, 1, 2, 2, 4, 4, 2)) # 设置绘图边框信息 par(mar=c(1,0.5,1,4),cex=1) col=rgb(red=c(1:100)*2.55/255,green=1-c(1:100)*2.55/255,blue=0); # 绘制图例 barplot(as.matrix(rep(1,100)),col=sort(col,dec=F),horiz=F,axes=F,border = NA ) axis(4,seq(0,100,by=20),seq(0,100,by=20), cex=2) dev.off()
图例的china.rda数据及绘图代码可在以下链接下载:
链接: https://pan.baidu.com/s/1NsX__i9-A6t4XqVefFnGUA 提取码: 9h5g