У меня есть файл .bed, в котором подробно описано, где в геноме находятся определенные гены, и я хотел бы построить прямоугольники, изображающие эти гены, по оси x, изображающей хромосомы, на которых они находятся. Хотя кажется, что существует множество инструментов для выполнения этого различными способами, все они выглядят довольно уродливо, поэтому, если возможно, я хотел бы сделать это с помощью ggplot, где у меня больше контроля над внешним видом конечного продукта. Файл отформатирован в четыре столбца следующим образом:
chromosomeNAME geneStart geneEnd geneName ChrmLength
chrm1 3714014 3735354 geneA 6509629
chrm1 4130851 4178170 geneB 6509629
chrm2 264426 307752 geneC 5196352
chrm2 334381 382612 geneD 5196352
Итак, я хотел бы, чтобы вышеприведенное показывало две оси x: одну для первой хромосомы и одну для второй хромосомы, которые идут от 1-chrmlength, а затем имеют поля над осью, которые заполняются от GeneStart до GeneEnd. В идеале эти поля должны иметь цветовую кодировку в легенде.
Я знаю, как фасетировать график, но я не уверен, как заставить ggplot выводить заполненное поле, используя координаты начала/конца, как показано выше.
Спасибо!
Может быть, что-то вроде этого?
Если это полезно, мой код выглядит следующим образом.
library(scales)
library(dplyr)
library(ggplot2)
chromosomeNAME <- c("chrm1", "chrm1", "chrm2", "chrm2")
geneStart <- c(3714014, 4130851, 264426, 334381)
geneEnd <- c(3735354, 4178170, 307752, 382612)
geneName <- c("geneA", "geneB", "geneC", "geneD")
ChrmLength <- c(6509629, 6509629, 5196352, 5196352)
df <- data.frame(chromosomeNAME, geneStart, geneEnd, geneName, ChrmLength)
chromosomes <- df %>%
select(chromosomeNAME, ChrmLength) %>%
unique() %>%
mutate(ChrmStart = 0)
genes <- df %>%
select(chromosomeNAME, geneName, geneStart, geneEnd)
ggplot(chromosomes) +
geom_rect(mapping=aes(xmin=ChrmStart, xmax=ChrmLength, ymin=0, ymax=1), fill = "lightblue") +
geom_rect(genes, mapping=aes(xmin=geneStart, xmax=geneEnd, ymin=0, ymax=1, fill=geneName)) +
theme_light() +
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank()) +
scale_x_continuous(labels = comma) +
facet_grid(chromosomeNAME~.)
geom_segment
илиgeom_rect
? Не уверен, что именно вы ищете — может быть, вы можете найти пример того, как это должно выглядеть