首页 文章

订购数据以在ggplot2中绘制条形图

提问于
浏览
2

我需要 Build 一个我的数据的条形图,显示不同样本中的细菌相对丰度(每个列在整个数据集中总和为1) .

我的数据的一个子集:

> mydata


Taxon   CD6 CD1 CD12
Actinomycetaceae;g__Actinomyces 0.031960309 0.066683743 0.045638509
Coriobacteriaceae;g__Atopobium  0.018691589 0.003244536 0.00447774
Corynebacteriaceae;g__Corynebacterium   0.001846083 0.006403689 0.000516662
Micrococcaceae;g__Rothia    0.001730703 0.000426913 0.001894429
Porphyromonadaceae;g__Porphyromonas 0.073497173 0.065915301 0.175406872

我想要的是每个样本(CD6,CD1,CD12)的条形图,其中y值是细菌种类的相对丰度(Taxon列) .

我想(但我不确定)我的数据格式不适合做情节,因为我没有像我发现的例子那样分组变量...

ggplot(data)geom_bar(aes(x = revision,y = added),stat =“identity”,fill =“white”,color =“black”)

有没有办法订购我的数据,使它们成为此代码的输入?或者我该如何修改它?谢谢!

1 回答

  • 3

    你想要这样的东西吗?

    # sample data
    df <- read.table(header=T, sep=" ", text="
    Taxon CD6 CD1 CD12
    Actinomycetaceae;g__Actinomyces 0.031960309 0.066683743 0.045638509
    Coriobacteriaceae;g__Atopobium 0.018691589 0.003244536 0.00447774
    Corynebacteriaceae;g__Corynebacterium 0.001846083 0.006403689 0.000516662
    Micrococcaceae;g__Rothia 0.001730703 0.000426913 0.001894429
    Porphyromonadaceae;g__Porphyromonas 0.073497173 0.065915301 0.175406872")
    
    # convert wide data format to long format
    require(reshape2)
    df.long <- melt(df, id.vars="Taxon",
                    measure.vars=grep("CD\\d+", names(df), val=T),
                    variable.name="sample",
                    value.name="value")
    
    # calculate proportions
    require(plyr)
    df.long <- ddply(df.long, .(sample), transform, value=value/sum(value))
    
    # order samples by id     
    df.long$sample <- reorder(df.long$sample, as.numeric(sub("CD", "", df.long$sample)))
    
    # plot using ggplot
    require(ggplot2)
    ggplot(df.long, aes(x=sample, y=value, fill=Taxon)) + 
      geom_bar(stat="identity") +
      scale_fill_manual(values=scales::hue_pal(h = c(0, 360) + 15, # add manual colors
                                               c = 100, 
                                               l = 65, 
                                               h.start = 0, 
                                               direction = 1)(length(levels(df$Taxon))))
    

    enter image description here

相关问题