生成每列一个条形的条形图(将列转换为组)

时间:2016-03-20 10:37:38

标签: r ggplot2

我试图从此测试数据集(practice_dataset.csv)生成R中的图表:

genes,cell1,cell2,cell3,cell4
gene1,14,10,20,3
gene2,12,5,3,0
gene3,8.5,3,5,0
gene4,13,0,0,0
gene5,2.5,7.5,1,10

我想显示每个细胞存在多少个基因(gene1-gene5)的数量,其值大于0。我使用colSums(数据> 0)来汇总列,但我不明白如何告诉R每列是一个组。这就是我的代码目前的样子:

setwd("~/.../...")

library(ggplot2)

pdf("testplot.pdf", w=20, h=7)

#Load dataset
data <- read.table("practice_dataset.csv",
                   sep=",",
                   header=TRUE)

# Summarize the number of genes with a value of >0 for each column
genes.no <- colSums(data > 0)

# Generate bar plot with one bar of genes.no per cell/column 
geom_bar(genes.no)

dev.off()

1 个答案:

答案 0 :(得分:0)

我们可以使用barplot中的base R。如果“基因”是第一列,我们需要在执行colSums时删除该列,因为它是非数字的(data[-1])。并执行barplot

barplot(colSums(data[-1] >0))

enter image description here

如果我们想要使用ggplot执行此操作,我们可以使用gather(来自tidyr)将'wide'格式转换为'long',获取sum 'Val'按'Var'分组,并使用ggplot语法得到条形图。

library(ggplot2)
library(tidyr)
library(dplyr)
gather(data, Var, Val, -genes)  %>%
          group_by(Var) %>% 
          summarise(Val= sum(Val>0)) %>% 
          ggplot(., aes(x=Var, y=Val)) +
                  geom_bar(stat="identity")