在世界地图上标注单倍型分布

数据可视化 数据可视化 239 人阅读 | 0 人回复 | 2024-08-23

在进行种群遗传结构、迁移模式和进化历史的研究中,单倍型的分布是一个必做的分析。我这边给大家分享一下如何通过R语言优雅的在世界地图上标注单倍型分布。

数据准备

第1列到第5列分别代表“地点名称”,“经度”,“纬度”,“单倍型A的百分比”,“单倍型B的百分比”,“单倍型C的百分比”

location latitude longitude haplotype_A haplotype_B haplotype_C
Beijing 39.9 116.4 0.5 0.3 0.2
SaoPaulo -23.55 -46.63 0.2 0.6 0.2
NewYork 40.71 -74 0.4 0.3 0.3
Mumbai 19.08 72.88 0.3 0.4 0.3

准备工作

在开始之前,请确保您的R环境中安装了以下包:

  • <span class="ne-text">ggplot2</span>:用于创建图形。
  • <span class="ne-text">maps</span>:用于获取地图数据。
  • <span class="ne-text">dplyr</span>:用于数据操作。

在R控制台中运行以下命令来安装这些包:

install.packages("ggplot2")
install.packages("maps")
install.packages("dplyr")

运行代码

注意第11行和30行代码与你的单倍型对应。

# 加载必需的库
library(ggplot2)
library(dplyr)
library(maps)

# 示例数据,包含四个地点的纬度、经度和不同单倍型的百分比
data<-read.table('C:/Users/cuibaofeng/Desktop/新建文本文档.txt',header=T)

# 将数据从宽格式转换为长格式,方便ggplot2处理
bubble_data <- data %>%
  tidyr::pivot_longer(cols = c("haplotype_A", "haplotype_B", "haplotype_C"),  #注意和你的单倍型数目对应
                      names_to = "haplotype", values_to = "percentage") %>%
  mutate(haplotype = sub("haplotype_", "", haplotype))  # 移除列名前缀,简化显示

# 获取世界地图数据
world_map <- map_data("world")

# 初始化ggplot对象,设置地图底图
gg <- ggplot() +
  geom_polygon(data = world_map, aes(x = long, y = lat, group = group), fill = "gray", color = "white") +
  coord_fixed(1.3)  # 固定地图的纵横比,避免变形

# 绘制气泡图,使用位置偏移减少重叠
gg <- gg + geom_point(data = bubble_data, 
                      aes(x = longitude, y = latitude, size = percentage, color = haplotype), 
                      position = position_jitter(width = 2, height = 3),  # 添加随机偏移,防止图形完全重叠
                      alpha = 0.6)  # 设置透明度为0.6,使图形更易于观看

# 自定义颜色
gg <- gg + scale_color_manual(values = c("A" = "blue", "B" = "green", "C" = "red",bias=0.5)) #注意和你的单倍型数目对应

# 调整图例和气泡大小
gg <- gg + guides(size = guide_legend(title = "Percentage")) +
  scale_size(range = c(3, 10))  # 设置气泡大小的范围,从3到10

# 添加地点标签
gg <- gg + geom_text(data = data, 
                     aes(x = longitude, y = latitude, label = location), 
                     vjust = 1.5, hjust = 1.5)  # 调整标签位置,避免与气泡重叠

# 显示图形
print(gg)

结果解读

圆圈的颜色代表不同单倍型,圆圈的大小代表单倍型的比例,大家可以在代码的30行更改颜色。

微信扫一扫分享文章

+10
无需登陆也可“点赞”支持作者
分享到:
评论

使用道具 举报

300 积分
19 主题
+ 关注
热门推荐