绘制地图&热力图-R语言

本文介绍了如何使用R语言来绘制地图和热力图,通过下载地图文件并进行数据处理,展示了调整投影方式和添加颜色、地区标签等步骤,最终生成具有视觉吸引力的地图图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言说明

对于地域信息的描述,采用地图的形式展现会比语言描述或者一般的条形图、饼图更直观,近期需要展现不同地区数据差别,可以借鉴一些网站例如地图惠等导入数据制作,但很多都有一定限制,例如注册收费等,故利用R进行了绘制。参考openthings的博客成功制作出了漂亮的地图,他的博客写的很详细,很赞。
首先下载地图文件及其他用到的数据,解压保存到自己指定的文件夹中,绘图所用到的数据均在该文件中。

R代码实现

##加载相关包
library(mapdata)
library(maptools)
library(ggplot2)
library(plyr)

读取地图文件,并绘制出图形

china_map=readShapePoly("E://study_data//chinaprovinceborderdata_tar_gz//bou2_4p.shp")
plot(china_map)

效果如图,由于投影结果过于扁平,故需要调整。
这里写图片描述

ggplot(china_map,aes(x=long,y=lat,group=group))+
geom_polygon(fill="white",colour="black")+
coord_map("polyconic")+
theme(
    panel.grid=element_blank(),
    panel.background=element_blank(),
    axis.text=element_blank(),
    axis.ticks=element_blank(),
    axis.title=element_blank(),
    legend.position=c(0.2,0.3)
  )

调整投影方式后,图像如下,可以不要theme部分,自己查看效果,会有经纬线等信息。
这里写图片描述

x<-china_map@data
xs<-data.frame(x,id=seq(0:924)-1)#地图中共计有925个地域信息
china_map1<-fortify(china_map)
china_map_data<-join(china_map1,xs,type="full")#基于id进行连接
#unique(china_map@data$NAME)#查看地图数据中保存的地域名称,编辑自己的数据与其一致
mydata<-read.csv("E://study_data//data_dt.csv",header=T,as.is=T)
china_data <- join(china_map_data, mydata, type="full")#基于NAME字段进行连接,NAME字段来自于地图文件中

上述代码将地图数据与自己的数据进行连接,合并在一起,进一步绘制符合自己要求的热力图。

ggplot(china_data,aes(x=long,y=lat,group=group,fill=ratio))+
  geom_polygon(colour="grey40")+
  scale_fill_gradient(low="white",high="red")+
  coord_map("polyconic")+
  theme(
    panel.grid=element_blank(),
    panel.background=element_blank(),
    axis.text=element_blank(),
    axis.ticks=element_blank(),
    axis.title=element_blank(),
    legend.position=c(0.2,0.3)
  )##参数“ratio”为我们要展现的数据指标,基于该指标绘制热力图

图形结果如下,是不是有那么一丢丢好看,颜色可自己调整,这里我选用的红色。
这里写图片描述

下面加上地区标签。

province_city<-read.csv("E://study_data//pcity.csv",header=T,as.is=T)#获取省会城市坐标
ggplot(china_data,aes(long,lat))+
  geom_polygon(aes(group=group,fill=ratio),colour="grey",size=0.01)+
  scale_fill_gradient(low="white",high="red")+
  coord_map("polyconic")+
  geom_text(aes(x=jd,y=wd,label=name),data=province_city,colour="black",size=2.5)+
  theme(
    panel.grid=element_blank(),
    panel.background=element_blank(),
    axis.text=element_blank(),
    axis.ticks=element_blank(),
    axis.title=element_blank()
  )

边缘色为黑色个人觉得不好看很丑,调整为grey,最终成果图如下。
这里写图片描述

### 如何在世界地图上使用R语言创建热力 #### 使用`rworldmap`包绘制全球热力 为了在世界地图上创建热力,可以利用`rworldmap`包中的`splot()`函数。此函数允许将数据映射到国家层面的地图上并以颜色表示不同的数值范围。 安装和加载必要的软件包: ```r install.packages(&quot;rworldmap&quot;) # 如果尚未安装的话 library(rworldmap) ``` 准备要可视化的数据集。假设有一个名为`data_for_map`的数据框,其中包含两列:一列为ISO3字符编码(代表各个国家),另一列为对应的数值变量(比如人口数量)。对于本例来说,先构建一些模拟数据作为演示[^1]。 ```r set.seed(123) # 设置随机种子以便结果可重复 country_iso &lt;- c(&#39;CAN&#39;, &#39;USA&#39;, &#39;MEX&#39;) # 只选择了三个北美国家作示范;实际应用中应覆盖更多地 value_var &lt;- runif(length(country_iso), min=0, max=1e7) # 创建一个简单的数据帧用于绘 data_for_map &lt;- data.frame(Country=country_iso, Value=value_var) print(data_for_map) ``` 现在有了基础数据之后就可以调用`splot()`来进行地理空间上的热力绘制了: ```r sPlotObj &lt;- sPDF2sp SpatialPolygonsDataFrame(spdf=rworldmap::getMap(), regions=data_for_map$Country, joinCode=&quot;ISO3&quot;, nameColumnToJoin=&quot;Value&quot;) par(mai=c(0.8,0.8,.1,.1)) spChoropleth(sPlotObj , breaks=quantile(data_for_map$Value), col=brewer.pal(n=5,name=&#39;YlOrRd&#39;), border=&#39;gray&#39;) title(main=&quot;World Heat Map Example Using rworldmap Package&quot;, sub=paste(&quot;Data Range:&quot;, round(min(data_for_map$Value)), &quot;-&quot;, round(max(data_for_map$Value)))) legend(x=&quot;bottomright&quot;, legend=levels(cut(data_for_map$Value,breaks=quantile(data_for_map$Value))), fill=brewer.pal(n=5,name=&#39;YlOrRd&#39;)) ``` 这段脚本会生成一张基于给定数据的世界地图热力,在这里采用了分位数法定义颜色间,并选用了一个预设的颜色方案&#39;YlOrRd&#39;(黄色至红色渐变)[^2]。 #### 结合其他库增强效果 除了上述基本操作外,还可以考虑引入诸如`ggplot2`这样的形化扩展库来进一步美化表样式或是实现更复杂的自定义需求。例如,可以通过叠加散点层显示具体位置的信息点,或者调整配色方案使视觉呈现更加吸引人。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值