首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据基因组坐标对R数据帧进行分组,以绘制每个碱基的平均覆盖率

根据基因组坐标对R数据帧进行分组,以绘制每个碱基的平均覆盖率
EN

Stack Overflow用户
提问于 2020-03-23 17:14:36
回答 1查看 53关注 0票数 0

我想沿着不同的样本绘制基因组学区域每个碱基的平均覆盖率:我想绘制每个基因组在x轴上的位置,以及它在y轴上的平均覆盖率。

我有这个文件:其中第一列表示基因组区域,第二列表示不同样本的平均覆盖率。

代码语言:javascript
复制
12:36761802-36761804 54
12:36761802-36761805 42
12:36761802-36761806 56.5
12:36761802-36761810 28.75
12:36761803-36761804 29
12:36761803-36761806 30

正如您所看到的,行是重叠的,所以我不确定如何绘制它。

EN

回答 1

Stack Overflow用户

发布于 2020-03-23 18:24:57

您可以将范围绘制为线段:

代码语言:javascript
复制
library(ggplot2)

df$region_start <- as.numeric(unlist(lapply(strsplit(df$region, "-"), `[`, 1)))
df$region_end <- as.numeric(unlist(lapply(strsplit(df$region, "-"), `[`, 2)))

ggplot(df, aes(x = region_start, y = mean, colour = region)) + 
  geom_segment(aes(xend = region_end, yend = mean), size = 1.5) +
  labs(x = "locus")

编辑

在从OP中进一步澄清之后,它是应该绘制的每个点的值的平均值。这稍微有点复杂,但使用dplyr只需几行代码即可完成

代码语言:javascript
复制
library(ggplot2)
library(dplyr)

df$region_start <- as.numeric(unlist(lapply(strsplit(df$region, "-"), `[`, 1)))
df$region_end <- as.numeric(unlist(lapply(strsplit(df$region, "-"), `[`, 2)))
do.call("rbind", mapply(function(x, y, z) cbind(x:y, rep(z, 1 + y - x)),
                        df$region_start, 
                        df$region_end, 
                        df$mean)) %>%
  as.data.frame()                 %>%
  setNames(c("Locus", "Value"))   %>%
  group_by(Locus)                 %>%
  summarise(mean = mean(Value))   %>%
  ggplot(aes(x = Locus, y = mean)) + 
  geom_line() + labs(x = "Locus")

使用的数据:

代码语言:javascript
复制
           region  mean
36761802-36761804    54
36761802-36761805    42
36761802-36761806  56.5
36761802-36761810 28.75
36761803-36761804    29
36761803-36761806    30

Reprex:

代码语言:javascript
复制
df <- structure(list(region = c("36761802-36761804", "36761802-36761805", 
                "36761802-36761806", "36761802-36761810", "36761803-36761804", 
                "36761803-36761806"), mean = c(54, 42, 56.5, 28.75, 29, 30)), 
                class = "data.frame", row.names = c(NA, -6L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60810638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档