使用R语言可视化地图数据

在科研工作中,经常会遇到需要在地图上展示数据的情况,今天分享一下如何使用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

posted @ 2024-10-31 14:16  --看日出--  阅读(39)  评论(0编辑  收藏  举报