ggplot:几个直方图为一

时间:2017-07-15 12:53:11

标签: r ggplot2 geom-bar

我想使用ggplot绘制几种生物信息学工具的基准测试结果。我希望在同一个图形上有所有条形图,而不是每个工具都有一个图形。我已经有了LibreOffice的输出(见下图),但我想用ggplot重新做一遍。

现在我为每个工具提供了这种代码(第一个示例):

data_reduced <- read.table("benchmark_groups_4sps", sep="\t", header=TRUE)

p<-ggplot(data=data_reduced, aes(x=Nb_sps, y=OrthoFinder)) +
    geom_bar(stat="identity", color="black", fill="red") +
    xlab("Number of species per group") + ylab("Number of groups") +
    geom_text(aes(label=OrthoFinder), vjust=1.6, color="black", size=3.5)

但我还没有找到如何将所有图形粘贴在一起,而不是如何将它们合并为一个图形。

wanted output (from LibreOffice)

我的输入数据:

Nb_species  OrthoFinder FastOrtho   POGS (no_para)  POGS (soft_para)    proteinOrtho
4   125 142 152 202 114
5   61  65  42  79  44
6   37  29  15  21  8
7   19  17  4   7   5
8   15  10  1   0   0
9   10  2   0   0   0

谢谢!

1 个答案:

答案 0 :(得分:0)

也许这可以帮助你朝着正确的方向前进:

# sample data
df = data.frame(Orthofinder=c(1,2,3), FastOrtho=c(2,3,4),   POGs_no_para=c(1,2,2))

library(reshape2)
library(dplyr)

# first let's convert the dataset: Convert to long format and aggregate.
df = melt(df, id.vars=NULL)
df = df %>% group_by(variable,value) %>% count()

# Then, we create a plot.
ggplot(df, aes(factor(value), n, fill = variable)) + 
  geom_bar(stat="identity", position = "dodge") + 
  scale_fill_brewer(palette = "Set1")

关于格式化图表有足够的文档,所以我会留给你;)希望这有帮助!

  

编辑:由于在我输入答案时问题已更改为使用不同的数据集作为原点,因此以下是修改后的代码:

df = data.frame(Nb_species = c(4,5,6,7),  OrthoFinder=c(125,142,100,110), FastOrtho=c(100,120,130,140))

library(reshape2)
library(dplyr)
df = melt(df, id.vars="Nb_species")

ggplot(df, aes(factor(Nb_species), value, fill = variable)) + 
  geom_bar(stat="identity", position = "dodge") + 
  scale_fill_brewer(palette = "Set1")