我是ggplot2的新手,我很难通过2个因子为每个基因制作一个条形图。
我想用2个因子分别绘制每个基因:“cell_type”和“age”。
x轴表示“细胞类型”(6)类别,并且每个“细胞类型”类别内应该是5个代表“年龄”类别的条。 y轴代表基因表达值(平均值+误差条)。
我的代码:
mat= t(exprs(eSet))
colnames(mat) = fData(eSet)$Symbol
rownames(mat = pData(eSet)$genotype
GENOTYPE <- rownames(mat)
AGE <- pData(eSet)$age
d.f_all_genes2 <- data.frame(GENOTYPE, AGE, mat)
d.f_all_genes2[1:3,1:10]
GENOTYPE AGE X1.2.SBSRNA4 A1BG A1BG.AS1 A1CF A2LD1 A2M A2ML1 A2MP1
1 rag_a 54 0 0 0 0 0 0 0 0
2 rag_wt 54 0 0 0 0 0 18 0 0
3 wt_wt 54 0 0 0 0 0 1 0 0
melted <- melt(d.f_all_genes2, id.vars="GENOTYPE")
head(melted)
GENOTYPE variable value
1 rag_a AGE 54
2 rag_wt AGE 54
3 wt_wt AGE 54
不幸的是,我失去了所有的基因。
我还打算做以下事情:
means <- ddply(melted, c("AGE", "variable"), summarise, mean=mean(value))
means.sem <- ddply(melted, c("AGE", "variable"), summarise, mean=mean (value),sem=sd(value)/sqrt(length(value)))
means.sem <- transform(means.sem, lower=mean-sem, upper=mean+sem)
ggplot(means[means$variable == "GENE of Interest=Symbol",], aes(x = factor(AGE), y = mean)) + geom_bar(stat= "identity", colour = "blue", outlier.shape = NA)+ facet_grid(~GENOTYPE) + facet_wrap(~variable) + ylab(expression(paste(Log[2], " Expression Values"))) + theme(axis.text=element_text(size=13, color="black"),axis.title=element_text(size=12, face="bold",color="black"), plot.title=element_text(size=14,face="bold", color="black"), strip.text.x = element_text(colour = "black", face= "bold",angle = 0, size = 20))
非常感谢任何建议和帮助如何使其发挥作用。
提前多多感谢。
答案 0 :(得分:0)
从您的示例中很难看出,但在下面我将假设您的原始表格对于每个年龄/基因型组合都有多行。
评论中的第一个aosmith是关于熔化声明的。您还可以为变量指定名称以使事情更清晰。声明应该是:
>melted <- melt(d.f_all_genes2, id.vars=c("GENOTYPE", "AGE"), variable_name="Symbol")
GENOTYPE AGE Symbol value
1 rag_a 54 X1.2.SBSRNA4 0
2 rag_wt 54 X1.2.SBSRNA4 0
3 wt_wt 54 X1.2.SBSRNA4 0
4 rag_a 54 A1BG 0
5 rag_wt 54 A1BG 0
6 wt_wt 54 A1BG 0
....<SNIP>...
现在您拥有正确形式的数据,以及绘制它的时间。它总是难以描述你想要的东西,但我想你想要一个面板网格,基因型从左到右排列,基因从上到下排列。你可能想要考虑点而不是条形,然后将所有基因型放在一个图上,但这就是你如何做棒。
首先,您要绘制的数据是融化的数据
> gg <- ggplot(melted)
在x轴上,您需要AGE
和y value
,所以:
> gg <- gg + aes(x=AGE, y=value)
你想要一个面板或方面的网格,所以:
> gg <- gg + facet_grid(Symbol~GENOTYPE)
现在是一个巧妙的伎俩。 ggplot
可以使用stat_summary
处理您的摘要,因此无需事先进行。
> gg <- gg + stat_summary(fun.y=mean, geom="bar", fill="blue")
添加条形图。您还需要添加错误栏,我将定义一个sem函数以使其更整洁:
> sem <- function(x) sqrt(var(x)/length(x))
> gg <- gg + stat_summary(fun.ymin=function(x) mean(x)-sem(x),
+ fun.ymax=function(x) mean(x)+sem(x),
+ fun.y=mean,
+ geom="errorbar")
剩下的就是添加格式
> gg <- gg + ylab(expression(paste(Log[2], " Expression Values"))) + theme(axis.text=element_text(size=13, color="black"),axis.title=element_text(size=12, face="bold",color="black"), plot.title=element_text(size=14,face="bold", color="black"), strip.text.x = element_text(colour = "black", face= "bold",angle = 0, size = 20))