2017-09-08 145 views
-1

我有一張表格,其中有不同樣本的歸一化分數。我計算了z值和需要創建的情節如下圖所示:如何在R中繪製Z分數

enter image description here

我的表如下所示:

Gene_name E_2401_ctrl_1 E_2401_ctrl_2 E_2401_ctrl_3 E_2401_drt_1 E_2401_drt_2 LOC_Os01g01312 1.601736731 0.310548148 1.238589942 -0.899941148 -0.980640435 LOC_Os01g01360 -0.850254449 -0.420792594 0.083358279 0.86759297 0.102030534 LOC_Os01g01390 0.40382069 -0.377555928 -0.009849284 -0.285629267 0.219967368 LOC_Os01g01610 -1.102507436 -0.90329537 -0.458899223 1.042853272 0.904937227 LOC_Os01g01620 -0.806239145 -1.190898502 -0.229250108 0.812535653 1.004865332

我有近3000個基因和50個樣本。因此,在Excel中繪圖不是一種選擇。

+2

好了,開始讀一些GGPLOT2教程。 – Roland

+1

[可重現的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)一旦你更好地理解你的問題是獲得良好迴應的最好方法這裏。 –

回答

2

從數據創建數據幀:

df <- data.frame(Gene_name = c("E_2401_ctrl_1", "E_2401_ctrl_2", "E_2401_ctrl_3", "E_2401_drt_1", "E_2401_drt_2"), 
       LOC_Os01g01312 = c(1.601736731, 0.310548148, 1.238589942, -0.899941148, -0.980640435), 
       LOC_Os01g01360 = c(-0.850254449, -0.420792594, 0.083358279, 0.86759297, 0.102030534), 
       LOC_Os01g01390 = c(0.40382069 , -0.377555928, -0.009849284, -0.285629267, 0.219967368), 
       LOC_Os01g01610 = c(-1.102507436, -0.90329537, -0.458899223, 1.042853272, 0.904937227), 
       LOC_Os01g01620 = c(-0.806239145, -1.190898502, -0.229250108, 0.812535653, 1.004865332)) 

library(ggplot2) 
library(reshape2) 

爲ggplot重塑長格式是個好主意

df_melt <- reshape2::melt(df, id.vars = "Gene_name") 

檢查數據現在看起來如何

head(df_melt, 10) 

基因名稱在一列中,並且相應的z分數在另一列中

ggplot(data = df_melt)+ 
     geom_line(aes(x = variable, y = value, group = Gene_name))+ 
     theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 
     xlab("gene")+ 
     ylab("") 

如何讀取:

ggplot(data = df_melt) 

既然你想連接值的行指定,從中可以得出的情節

geom_line(aes(x = variable, y = value, group = Gene_name)) 

geom_line數據。在ggplot中,所有變量都在aes()內部。

theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 
    xlab("")+ 
    ylab("z-score") 

剩下的只是化妝

,如果你想刻面圖,添加一個變量,通過它會突間

df_melt <- data.frame(rbind(df_melt, df_melt), 
    letters=rep(c("A", "B"), each = nrow(df_melt))) 

在這裏,我只是重複數據幀兩次,

rbind(df_melt, df_melt) 

以及第一個標有「A」和第二個標有「B」的行。

letters=rep(c("A", "B"), each = nrow(df_melt)) 
df_melt 

現在你可以用「字母」變小面

ggplot(data = df_melt)+ 
    geom_line(aes(x = variable, y = value, group = Gene_name))+ 
    theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 
    xlab("gene")+ 
    ylab("z-score")+ 
    facet_wrap(~letters, ncol = 1) 

編輯:類羣標籤可以通過添加顏色=變量參數的AES(着色),您需要彩色的GEOM內調用。我會從一開始啓動:

df <- data.frame(Gene_name = c("E_2401_ctrl_1", "E_2401_ctrl_2", "E_2401_ctrl_3", "E_2401_drt_1", "E_2401_drt_2"), 
       LOC_Os01g01312 = c(1.601736731, 0.310548148, 1.238589942, -0.899941148, -0.980640435), 
       LOC_Os01g01360 = c(-0.850254449, -0.420792594, 0.083358279, 0.86759297, 0.102030534), 
       LOC_Os01g01390 = c(0.40382069 , -0.377555928, -0.009849284, -0.285629267, 0.219967368), 
       LOC_Os01g01610 = c(-1.102507436, -0.90329537, -0.458899223, 1.042853272, 0.904937227), 
       LOC_Os01g01620 = c(-0.806239145, -1.190898502, -0.229250108, 0.812535653, 1.004865332)) 

df_melt <- reshape2::melt(df, id.vars = "Gene_name") 

#the ifelse() part makes another column called "lett" where if it is a "crtl" gene will be "A" and "B" if not 

df_melt <- data.frame(rbind(df_melt, df_melt), 
         lett = ifelse(grepl("ctrl", df_melt$Gene_name), "A", "B")) 


ggplot(data = df_melt)+ 
    geom_line(aes(x = variable, y = value,group = Gene_name, color=lett))+ 
    theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 
    xlab("gene")+ 
    ylab("z-score")+ 
    scale_color_manual(values=c("A" = "red", "B" = "blue")) 

更多的控制顏色:

http://ggplot2.tidyverse.org/reference/scale_manual.html http://ggplot2.tidyverse.org/reference/scale_brewer.html

+0

非常感謝您的幫助。有時我的基因是不同羣集的一部分。我有他們的羣集標籤。是否有可能根據集羣標籤對行進行着色?基本上,除了gene_name列之外,我將有一個包含相應羣集標籤的列。 – user2012575

+0

很高興幫助。編輯帖子,見上文。 – missuse