R语言——ggmap包可视化地图

ggmap包简介

ggplot2包可以实现将地理信息数据进行可视化,而ggmap包是基于ggplot2可视化地图的拓展包,其绘图方法与ggplot2类似。ggmap包还可以绘制可以交互的地图,但需要google账户实时获取地图数据,所以下面只介绍该包绘制静态地图的功能。

数据准备

下面利用ggmap包和ggplot2包可视化机场与航线数据,展示如何绘制点、线和地图热力图等,程序如下所示:

复制代码
## 导入包
library(ggplot2);library(ggmap);library(maps);library(ggsn)
library(geosphere);library(dplyr);library(RColorBrewer);library(readxl)
## 读取美国航线数据集
airport <- read.csv("data/chap8/airportusa.csv")
head(airport,3)
##                          Name       City IATA ICAO Latitude Longitude
## 1   Orlando Executive Airport    Orlando  ORL KORL  28.5455  -81.3329
## 2    Laurence G Hanscom Field    Bedford  BED KBED  42.4700  -71.2890
## 3    Oscoda Wurtsmith Airport     Oscoda  OSC KOSC  44.4516  -83.3941
## 针对美国机场数据,ggmap可视化地图方式
usamapdata <- map_data("state")
usamapdata <- fortify(usamapdata)
head(usamapdata,3)
##        long      lat group order  region subregion
## 1 -87.46201 30.38968     1     1 alabama      <NA>
## 2 -87.48493 30.37249     1     2 alabama      <NA>
## 3 -87.52503 30.37249     1     3 alabama      <NA>

在上面的程序中,首先通过map_data()函数导入了美国各州数据表,并使用fortify()函数对其进行简化,在输出的结果中包含经纬度坐标和分组等变量等。

地图可视化

下面使用读取的数据集进行地图可视化,首先在地图上绘制机场的位置坐标,程序如下所示:

复制代码
## 可视化美国本土地图
ggplot(usamapdata, aes(x = long, y = lat))+
  # 不同的州使用不同的颜色填充
  geom_polygon(aes(group = group,fill = region),colour = "white")+
  theme(legend.position = "none")+
  scale_fill_viridis_d(alpha = 0.5)+
  ## 添加点
  geom_point(data = airport,aes(x = Longitude,y = Latitude),
             colour = "tomato",size = 0.5)+
  ggtitle("地图上机场位置")+
  # 在地图上添加其它的小部件
  ggsn::north(usamapdata,location = "topright",
              scale = 0.15,symbol = 1)+
  ## 添加标尺
  ggsn::scalebar(data = usamapdata,location = "bottomleft", 
                 dist = 500,model = "WGS84",dist_unit = "km",
                 transform = TRUE,st.size = 3)

上面的程序中,首先通过ggplot()和geom_polygon()函数绘制地图,然后利用geom_point()函数在地图上添加点,最后使用ggsn包中的小部件函数north()和scalebar()在地图上添加指向北的图标和标尺,得到的图像如图1所示:

图1 基于ggplot2的机场位置地图可视化

下面在图1上进一步添加机场之间的航线,程序如下所示:

复制代码
## 可视化机场航线,读取航线数据
airline <- read.csv("data/chap8/usaairline.csv")
## 可视化美国本土地图
ggplot(usamapdata, aes(x = long, y = lat))+
  # 不同的州使用不同的颜色填充
  geom_polygon(aes(group = group,fill = region),colour = "white")+
  theme(legend.position = "none")+
  scale_fill_viridis_d(alpha = 0.5)+
  ## 添加点
  geom_point(data = airport,aes(x = Longitude,y = Latitude),
             colour = "tomato",size = 0.5)+
  ggtitle("地图上机场位置")+
  # 在地图上添加其它的小部件
  ggsn::north(usamapdata,location = "topright",
              scale = 0.15,symbol = 1)+
  ## 添加标尺
  ggsn::scalebar(data = usamapdata,location = "bottomleft", 
                 dist = 500,model = "WGS84",dist_unit = "km",
                 transform = TRUE,st.size = 3)+
  geom_segment(aes(x = Longitude.x, y = Latitude.x,
                 xend = Longitude.y, yend = Latitude.y),
             data = airline,colour = "orange",alpha = 0.5,size=0.1)

在上面的程序中,首先读取飞机航线数据airline,然后通过geom_segment()函数绘制两点之间的连线,最终可得如图2所示的图像:

图2 基于ggplot2的机场航线地图可视化

由图2的绘制过程可以发现,使用ggplot2包中的geom_segment()函数为地图添加线更加简单。

针对机场的位置分布情况,还可以通过在散点图上添加密度热力图图层,便于分析机场在地图上的分布密度,程序如下:

复制代码
## 读取机场数量数据
airport2 <- read.csv("data/chap8/airportusa2.csv")
## 在地图上可视化密度热力图
ggplot(usamapdata, aes(x = long, y = lat))+
  geom_polygon(aes(group = group),fill = "lightblue",colour = "white")+
  ## 添加密度曲线
  geom_density2d(data = airport2,aes(x=Longitude, y=Latitude),size = 0.1)+
  ## 热力图
  stat_density2d(data = airport2, aes(x = Longitude, y =  Latitude,
                                     fill = ..level.., alpha = ..level..), 
                size = 0.3, bins = 40, geom = "polygon")+
  ## 填充颜色和透明度设置
  scale_fill_gradientn(colours=rev(brewer.pal(8, "Spectral")))+
  scale_alpha(range = c(0, 0.3))+theme(legend.position = "none")+
  ## 添加点
  geom_point(data = airport2,aes(x = Longitude,y = Latitude),
             colour = "tomato",size = 0.5,alpha = 0.8)+
  ggtitle("美国机场密度热力图")

在上面的程序中,通过geom_density2()函数在地图上添加密度曲线,通过stat_density2d()函数添加密度热力图,并设置了填充颜色和透明度,最终可得如图3所示的图像:

图3 基于ggplot2的机场位置分布密度热力图

还可以通过气泡图可视化美国各州机场数量的分布情况,程序如下:

复制代码
## 数据准备,计算每个州的机场数量
aipporenum <- airport2 %>% group_by(state)%>%
  ## 计算经纬度位置和机场数量
  summarise(Lat = mean(Latitude),
            Lon = mean(Longitude),
            number = n())
head(aipporenum)
## # A tibble: 6 x 4
##   state         Lat    Lon number
##   <fct>       <dbl>  <dbl>  <int>
## 1 Alabama      32.8  -86.5     26
## 2 Arizona      33.4 -112.      37
## 3 Arkansas     35.0  -92.6     16
## 4 California   35.9 -119.     109
## 5 Colorado     39.2 -106.      29
## 6 Connecticut  41.5  -72.8      9

通过上面的程序,计算获得了每个州的所有机场平均经纬度坐标和机场的数量,下面绘制机场分布的气泡图:

复制代码
## 可视化气泡图
ggplot(usamapdata, aes(x = long, y = lat))+
  # 不同的州使用不同的颜色填充
  geom_polygon(aes(group = group),colour = "white",fill = "lightblue")+
  ## 添加气泡散点
  geom_point(data = aipporenum,aes(x = Lon,y = Lat,size = number),
             colour = "red",alpha = 0.75,shape = 19)+
  ggtitle("各州机场数量气泡图")

运行上面的程序,可得如图4所示的气泡图:

图4 基于ggplot2的机场位置分布气泡图

在图4中,气泡的位置为该州各机场经纬度坐标的平均值,气泡的大小表示该州机场的数量。

参考书籍

本文中的内容来自书籍《R语言数据可视化实战 ------大数据图表从入门到精通》,是其中某个小节内容的整理。书中有更多的R语言数据可视化分析使用案例,可学习更多的关于R语言数据可视化的内容。

|---------------------|
| 今天的分享就到这里了,敬请期待下一篇! |

最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!

相关推荐
板面华仔10 分钟前
机器学习入门(三)——决策树(Decision Tree)
人工智能·决策树·机器学习
GAOJ_K23 分钟前
滚珠花键的无预压、间隙调整与过盈配合“场景适配型”
人工智能·科技·机器人·自动化·制造
ai_xiaogui28 分钟前
【开源探索】Panelai:重新定义AI服务器管理面板,助力团队私有化算力部署与模型运维
人工智能·开源·私有化部署·docker容器化·panelai·ai服务器管理面板·comfyui集群管理
源于花海33 分钟前
迁移学习的前沿知识(AI与人类经验结合、传递式、终身、在线、强化、可解释性等)
人工智能·机器学习·迁移学习·迁移学习前沿
king of code porter1 小时前
百宝箱企业版搭建智能体应用-平台概述
人工智能·大模型·智能体
愚公搬代码1 小时前
【愚公系列】《AI短视频创作一本通》004-AI短视频的准备工作(创作AI短视频的基本流程)
人工智能·音视频
物联网软硬件开发-轨物科技1 小时前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能
电商API_180079052471 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
梁辰兴1 小时前
百亿美元赌注变数,AI军备竞赛迎来转折点?
人工智能·ai·大模型·openai·英伟达·梁辰兴·ai军备竞赛
PaperRed ai写作降重助手1 小时前
智能写作ai论文生成软件推荐
人工智能·aigc·ai写作·智能降重·paperred