我试图从此测试数据集(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()
答案 0 :(得分:0)
我们可以使用barplot
中的base R
。如果“基因”是第一列,我们需要在执行colSums
时删除该列,因为它是非数字的(data[-1]
)。并执行barplot
。
barplot(colSums(data[-1] >0))
如果我们想要使用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")