在R语言中绘制地图是数据可视化的一个重要方面,其提供了多种方法和工具包来绘制地图,包括基于经纬度数据的地图、行政区划图等。今天教大家使用ggmap、maps这两个包,进行地图的绘制。
ggmap包能够从多种在线地图服务(如 Google Maps、OpenStreetMap、Stamen Maps 等)获取地图数据,并且由于它是基于ggplot2可视化地图的拓展包,可以和与ggplot2无缝集成。
1.1 地图数据的获取
map <- get_map(location = "New York City", source = "google", maptype = "roadmap", zoom = 10)
#使用 get_map() 函数获取地图数据,其主要参数包括:
#location:指定地图中心位置,可以是经纬度坐标或具体的地址
#source:指定地图数据源,如“google”, “osm”, “stadia”等。
#maptype:定义地图类型,如 "roadmap"(道路图)、"terrain"(地形图)、"satellite"(卫星图)等。
#zoom:控制地图的缩放级别。
如果是有非常具体的经纬度需求:
boundry <- c(left=10,right=170,bottom=15,top=60)
mapdata <- get_stadiamap(boundry,zoom =5)
需要注意的点:在这里因为使用了其他的数据库,所以需要给API的key,此时需要大家自己进行注册:
API key获取网址:
https://mapsplatform.google.com/
https://client.stadiamaps.com/signup/
1.2 在地图上绘制自己的数据
首先我们需要准备一个文件,要求起码存在3列数据,一列为样本名,另外2列分别为经纬度信息。如果想要在绘图中加入样本分类信息,则需要增加至4列。
map_data<-read.delim('local.txt',stringsAsFactors = F,header = T)
map_data$latitude <- as.numeric(map_data$latitude)
map_data$Longitude <- as.numeric(map_data$Longitude)
和ggplot2结合进行图像绘制:
# 设置色卡
mycolor_palette <-c('#3A6963','#712820', '#BD956A','#5F3D69','#E5D2DD', '#53A85F', '#F1BB72', '#F3B1A0', '#D6E7A3', '#57C3F3', '#476D87','#E59CC4', '#AB3282', '#23452F', '#585658','#9FA3A8', '#E0D4CA', '#58A4C3', '#E4C755', '#F7F398','#AA9A59', '#E63863', '#E39A35', '#C1E6F3', '#6778AE', '#91D0BE', '#B53E2B','#DCC1DD', '#CCE0F5', '#CCC9E6', '#625D9E', '#68A180', '#968175')
# 创造一个散点图的图层,指定数据、xy轴以及颜色的映射
world.point <- geom_point(data = map_data,aes(x=Longitude,y=latitude,color=Group),size=1)
# 使用 ggmap() 函数将获取的地图数据转换为 ggplot 对象并绘制地图,结合散点图进行综合呈现
ggmap(mapdata)+ world.point+
scale_color_manual(values = mycolor_palette)+
guides(color=FALSE)+
xlab('Longitude')+ylab('Latitude')
maps 包是 R 语言中用于绘制地图的一个基础包,它提供了简单的地图数据和绘图功能,适合用于绘制静态地图。
绘制世界地图:
map("world", fill = TRUE, col = "lightblue", lty = 1, lwd = 0.5)
# fill:是否填充地图区域。
# col:填充颜色。
# lty:边界线的类型。
# lwd:边界线的宽度。
# 绘制某个特定国家或地区的地图,可以通过 regions 参数指定:
# map("world", regions = "China")
虽然 maps 包主要用于简单的地图绘制,但可以通过将地图数据转换为 ggplot2 的数据格式,实现更复杂的地图可视化。
获取地图数据,并用ggplot2进行绘图
world_map <- map_data("world")
ggplot() +
geom_polygon(data = world_map,
aes(x = long, y = lat, group = group),
fill = "lightblue", color = "white") +
theme_void()
如果需要在地图上添加自定义数据(如点、线等),可以结合 ggplot2 的语法进行操作:
# 假设有一个包含城市经纬度的数据框
cities <- data.frame( name = c( "New York", "London"), long = c( -74.0059, -0.127758), lat = c( 40.7128, 51.507351))
city_label <- geom_point(data = cities, aes(x = long, y = lat), color = "red", size = 3)
ggplot() +
geom_polygon(data = world_map, aes(x = long, y = lat, group = group), fill = "lightblue", color = "white") +
city_label +
theme_void()
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!