Играя больше с программой, я смог создать новый набор данных в виде скользящего среднего значения не перекрывающихся окон размером 1 Кбайт, используя этот пост: Покрытие генома в виде скользящего окна , которое не заняло много времени или не затягивало много памяти.
library(reshape) # to rename columns
library(data.table) # to make sliding window dataframe
library(zoo) # to apply rolling function for sliding window
library(ggplot2)
#upload data to dataframe, rename headers, make locus continuous, create subsets
depth <- read.table("sorted.depth", sep="\t", header=F)
depth<-rename(depth,c(V1="Chr", V2="locus", V3="coverageX", V3="coverageY")
depth$locus <- 1:12157105
Xdepth<-subset(depth, select = c("Chr", "locus","coverageX"))
#genome coverage as sliding window
Xdepth.average<-setDT(Xdepth)[, .(
window.start = rollapply(locus, width=1000, by=1000, FUN=min, align="left", partial=TRUE),
window.end = rollapply(locus, width=1000, by=1000, FUN=max, align="left", partial=TRUE),
coverage = rollapply(coverage, width=1000, by=1000, FUN=mean, align="left", partial=TRUE)
), .(Chr)]
Для построения нового набора данных:
#plot sliding window by end position and coverage
Xdepth.average.plot <- ggplot(Xdepth.average, aes(x=window.end, y=coverage, colour=Chr)) +
geom_point(shape = 20, size = 1) +
scale_x_continuous(name="Genomic Position (bp)", limits=c(0, 12071326), labels = scales::scientific) +
scale_y_continuous(name="Average Coverage Depth", limits=c(0, 250))
Затем я попытался добавить facet_grid(. ~ Chr)
для разделения по хромосоме, но каждая панель отстоит далеко друг от друга и повторяет всю ось вместо того, чтобы быть непрерывной.
Обновление: я пробовал различные настройки с scales = "free_x"
и space = "free_x"
. Наиболее близким было удаление пределов из scale_x_continuous()
и использование scales = "free_x"
и space = "free_x"
с facet_grid
, но ширина панели по-прежнему не пропорциональна размеру хромосомы, а ось x очень шаткая. Для сравнения я вручную добавил контрольные линии, используя geom_vline(xintercept = c()
между хромосомами (ожидаемый результат).
Идеальное разделение и ось X без надписей на панели с использованием
Xdepth.average.plot +
geom_vline(xintercept = c(230218, 1043402, 1360022, 2891955, 3468829, 3738990, 4829930, 5392573, 5832461, 6578212, 7245028, 8323205, 9247636, 10031969, 11123260, 12071326, 12157105))
График с контрольными линиями
Снятие лимита с scale_x_continuous()
и использование facet_grid
Xdepth.average.plot5 <- ggplot(Xdepth.average, aes(x=window.end, y=coverage, colour=Chr)) +
geom_point(shape = 20, size = 1) +
scale_x_continuous(name="Genomic Position (bp)", labels = scales::scientific, breaks =
c(0, 2000000, 4000000, 6000000, 8000000, 10000000, 12000000)) +
scale_y_continuous(name="Average Coverage Depth", limits=c(0, 200), breaks = c(0, 50, 100, 150, 200, 300, 400, 500)) +
theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
theme(legend.position="none")
X.p5 <- Xdepth.average.plot5 + facet_grid(. ~ Chr, labeller=chr_labeller, space="free_x", scales = "free_x")+
theme(panel.spacing.x = grid::unit(0, "cm"))
X.p5
График с гранями и без ограничений по оси X