[英]ggplot2: plotting the data in geom_tile for absence or presence
我正在嘗試繪制數據
coords chr pos ref alt GT freq sample
chr1_10126848 chr1 10126848 G T 0/1 0.1 b1t2
chr1_1022375 chr1 1022375 C T 0/1 0.018 b1t2
chr1_103025843 chr1 103025843 T A 0/1 0.125 b1t2
chr1_103025922 chr1 103025922 T C 0/1 0.314 b1t1
chr1_1042008 chr1 1042008 C T 0/1 0.031 b1t2
chr1_1051632 chr1 1051632 G A 0/1 0.03 b1t3
chr1_10599364 chr1 10599364 A T 0/1 0.208 b1t3
chr1_10599364 chr1 10599364 A T 0/1 0.308 b1t2
chr1_10599364 chr1 10599364 A T 0/1 0.108 b1t1
chr1_1062578 chr1 1062578 T C 0/1 0.207 b1t2
chr1_107480827 chr1 107480827 C T 0/1 0.14 b1t3
chr1_107480827 chr1 107480827 C T 0/1 0.54 b1t2
chr1_107480827 chr1 107480827 C T 0/1 0.24 b1t1
chr1_107480957 chr1 107480957 C A 0/1 0.214 b1t3
chr1_1084149 chr1 1084149 G A 0/1 0.036 b1t2
.....
使用ggplot如下:
x<-read.table("trial2.txt", header=T, sep="\t")
ggplot(x,aes(sample, coords, fill=freq))+geom_tile()+ theme(axis.text.y = element_blank())+ scale_fill_gradient(low = "white", high = "red")
任何人都可以指導我如何對數據進行排序,以便首先繪制出所有樣本中存在的坐標(y軸),最后繪制出每個樣本唯一的坐標。
首先為每個coords
total
創建唯一數量的樣本-您可以使用length(unique(sample))
或更簡單地使用dplyr::n_distinct
。 另一個概念是您將希望通過此新變量對coords
進行reorder
(在本示例中,我將此新變量稱為total
):
x %>%
mutate_if(is.factor, as.character) %>%
group_by(coords) %>%
mutate(total = n_distinct(sample)) %>%
ggplot(aes(sample, reorder(coords, total), fill = freq)) +
geom_tile() +
scale_fill_gradient(low = "white", high = "red") +
theme(axis.text.y = element_blank())
感謝Jason回答得這么快。 我也想通了,雖然不如您復雜,但可以!
x<-read.table("trial.txt", header=T, sep="\t") ## read input file
x1<-merge(x, data.frame(table(coords = x$coords)), by = c("coords")) ## print frequency of each coordinate into new column "Freq". NOTE: "Freq" is different column than "freq"
x2<-arrange(x1, Freq, sample) ## sort the data first by "Freq" and then by "sample"
ggplot(x2,aes(sample, coords))+geom_tile(aes(fill = freq))+ scale_fill_gradient(low = "white", high = "red") + scale_y_discrete(limits=unique(x2$coords)) + theme(axis.text.y = element_blank(), plot.title = element_blank(),axis.title.x = element_blank(), axis.title.y = element_blank()) ## finally plot
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.