2017-09-06 66 views
1

我有這個數據框df下面的讀數爲df<- read.table("WT1.txt", header= TRUE)。我想繪製每個長度值的直方圖標籤A C G T頻率。有沒有更好的方式來繪製這個?Barplot繪製不同序列長度的DNA頻率

df

length  A  C  G  T 
    17 95668 73186 162726 730847 
    18 187013 88641 120631 334695 
    19 146061 373719 152215 303973 
    20 249897 73862 115441 343179 
    21 219899 82356 109536 636704 
    22 226368 101499 111974 1591106 
    23 188187 112155 98002 1437280 
+1

直方圖是連續隨機變量。你想要一個酒吧情節?你想要什麼樣的輸出?如果你不知道你想要什麼輸出,那麼這真的不是一個適合堆棧溢出的編程問題。您可以在[stats.se]或不同的堆棧交換站點尋求統計數據可視化方面的幫助。 – MrFlick

+0

是的,我認爲這是混亂,我需要一個酒吧陰謀。謝謝 – MAPK

+0

@MAPK我更新了我的答案,頻率圖 – PoGibas

回答

3

你可以通過可變length熔化數據幀爲長格式和繪製堆疊柱狀圖與ggplot2

df <- read.table(text= 
    "length  A  C  G  T 
    17 95668 73186 162726 730847 
    18 187013 88641 120631 334695 
    19 146061 373719 152215 303973 
    20 249897 73862 115441 343179 
    21 219899 82356 109536 636704 
    22 226368 101499 111974 1591106 
    23 188187 112155 98002 1437280", header=T) 
library(reshape2) 
df <- melt(df, id.vars = "length") 
library(ggplot2) 
ggplot(df)+ 
    geom_bar(aes(x=length, y=value, fill=variable), stat="identity") 
1

使用dplyr以計算頻率爲每個基站和ggplot2來繪製條形圖。我更喜歡使用stat = "identity", position = "dodge"而不是隻使用stat = "identity",因爲它更好地理解數據的外觀。

library(tidyverse) 

gather(df, Base, value, -length) %>% 
    group_by(length) %>% 
    mutate(frequency = value/sum(value)) %>% 
    ggplot(aes(factor(length), y = frequency, fill = Base))+ 
     geom_bar(stat = "identity", position = "dodge", 
       color = "black", width = 0.6) + 
     labs(x = "Base pairs", 
      y = "Frequency", 
      fill = "Base") + 
     scale_y_continuous(limits = c(0, 1)) + 
     scale_fill_brewer(palette = "Set1") + 
     theme_classic() 

enter image description here