簡體   English   中英

ggplot2:在geom_tile中繪制數據是否存在

[英]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")  

我得到以下情節: 在此處輸入圖片說明 而我需要這樣的東西:

Desired_output

任何人都可以指導我如何對數據進行排序,以便首先繪制出所有樣本中存在的坐標(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM