在R里绘制地图

在R语言中绘制地图是数据可视化的一个重要方面,其提供了多种方法和工具包来绘制地图,包括基于经纬度数据的地图、行政区划图等。今天教大家使用ggmap、maps这两个包,进行地图的绘制。 ggmap...

在R语言中绘制地图是数据可视化的一个重要方面,其提供了多种方法和工具包来绘制地图,包括基于经纬度数据的地图、行政区划图等。今天教大家使用ggmap、maps这两个包,进行地图的绘制。

ggmap

1 代码

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)

attachments-2025-03-SqPPZP6k67c5542b90cc9.png

和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')

2 结果

attachments-2025-03-3sDJsFd167c5547e25391.png

maps

maps 包是 R 语言中用于绘制地图的一个基础包,它提供了简单的地图数据和绘图功能,适合用于绘制静态地图。

1 简单绘图

绘制世界地图:

map("world", fill = TRUE, col = "lightblue", lty = 1, lwd = 0.5)
# fill:是否填充地图区域。
# col:填充颜色。
# lty:边界线的类型。
# lwd:边界线的宽度。
# 绘制某个特定国家或地区的地图,可以通过 regions 参数指定:
# map("world", regions = "China")

attachments-2025-03-JLP3qnxx67c555239255c.png

2 结合 ggplot2

虽然 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()  

attachments-2025-03-YlOJGjON67c55599c1528.png

如果需要在地图上添加自定义数据(如点、线等),可以结合 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()

attachments-2025-03-znXT02ao67c5566e879c2.png

  • 发表于 11小时前
  • 阅读 ( 10 )
  • 分类:R

你可能感兴趣的文章

0 条评论

请先 登录 后评论
Ti Amo
Ti Amo

55 篇文章

作家榜 »

  1. omicsgene 712 文章
  2. 安生水 353 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. rzx 81 文章
  7. 红橙子 78 文章
  8. CORNERSTONE 72 文章