Barplot具有堆叠和分组选项,没有面网格

Mai*_*aik 3 r bar-chart ggplot2

我正在尝试使用以下数据集制作堆叠和分组的条形图:

dfplot  <- data.frame(organisms=c("M.musculus","D.melanogaster" ,"H.sapiens","O.sativa","S.pombe","C.familiaris",
           "G.gallus","P.falciparum","A.thaliana","C.elegans","D.rerio","B.taurus","S.cerevisiae","R.norvegicus","C.intestinalis","B.subtilis","E.coli"),                  
                      KEGGv2=c(20,7,21,126,106,62,26,80,5,5,13,306,8,35,32,104,107), 
                      KEGGv1=c(286,124,289,0,0,244,135,0,121,124,148,0,101,271,87,0,0),
                      Reactome=c(358,146,596,115,54,306,370,23,155,112,365,341,52,364,0,0,0))

# Melt the dataframe
melted <- melt(dfplot, "organisms")

# Reformat the data labels
melted$cat <- ''
melted[melted$variable == 'Reactome',]$cat <- "Reactome"
melted[melted$variable != 'Reactome',]$cat <- "KEGG"


ggplot(melted, aes(x=cat, y=value, fill=variable)) + 
  geom_bar(stat = 'identity', position = 'stack') +
  facet_grid(~ organisms)+ 
  scale_fill_manual(values=c("deepskyblue4", "lightblue1", "olivedrab2")) +
  labs(y = "Number of Pathways") +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),
        legend.title=element_blank(),
        strip.text.x = element_blank(),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"))
Run Code Online (Sandbox Code Playgroud)

我的输出如下:

在此输入图像描述

我使用了每个生物体的facet_grid,因为我希望混合stack(对于KEGGv1和KEGGv2),然后将其与另一组进行分组Reactome.然而,当进行熔化时,x轴将具有每个facet_grid两个标签(KEGG和Reactome,这是从熔化[cat]获得的变量).我不想要那个标签所以我删除它们.

我想要做的是每个分组都有生物体名称,因此17个分组条中的每一个都将具有相应生物体的名称**.因此,我错过了,我尝试了几种方法,但我找不到正确的方法.

提前致谢,

Mic*_*per 6

你可以做两件事来完成这项工作:

  1. 旋转刻面的标签,使它们以90度绘制
  2. 使用其中的switch = 'x'参数绘制图形下方的构面标签facet_grid.

这是完整的例子:

  ggplot(melted, aes(x=cat, y=value, fill=variable)) + 
    geom_bar(stat = 'identity', position = 'stack') +
    facet_grid(~organisms, switch = 'x')+ 
    scale_fill_manual(values=c("deepskyblue4", "lightblue1", "olivedrab2")) +
    labs(y = "Number of Pathways") +
    theme(axis.title.x=element_blank(),
          axis.text.x=element_blank(),
          axis.ticks.x=element_blank(),
          legend.title=element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          panel.background = element_blank(),
          axis.line.y = element_line(colour = "black"),
          strip.text = element_text(angle = 90))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我离开了默认的阴影背景,但您可以根据自己的喜好轻松设置样式.

Aproach Two

您可能需要考虑旋转绘图.这要求您coord_flip 调用构面之前使用图形的坐标.当我们面向另一个方向时,我们将facet参数更改为facet_grid(organisms~.).所有其他引用x或y的参数都被交换:

  ggplot(melted, aes(x=cat, y=value, fill=variable)) + 
    geom_bar(stat = 'identity', position = 'stack') +
    coord_flip() +
    facet_grid(organisms~., switch = 'y')  +
    scale_fill_manual(values=c("deepskyblue4", "lightblue1", "olivedrab2")) +
    labs(y = "Number of Pathways") +
    theme(axis.title.y=element_blank(),
          axis.text.y=element_blank(),
          axis.ticks.y=element_blank(),
          legend.title=element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          panel.background = element_blank(),
          axis.line.x = element_line(colour = "black"),
          strip.text.y = element_text(angle = 180))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述