崔耳又又 发表于 2024-8-23 08:56:55

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

**在进行种群遗传结构、迁移模式和进化历史的研究中,单倍型的分布是一个必做的分析。我这边给大家分享一下如何通过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控制台中运行以下命令来安装这些包:**

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

# 运行代码

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

```r
# 加载必需的库
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行更改颜色。**

![](data/attachment/forum/plugin_zhanmishu_markdown/202408/90275d75eb3f9560764e0a2c1fe8fd8a_1724374559_8827.jpg)
页: [1]
查看完整版本: 在世界地图上标注单倍型分布