首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ggplot2进行基因表达

用ggplot2进行基因表达
EN

Stack Overflow用户
提问于 2015-08-18 22:21:24
回答 1查看 1.4K关注 0票数 0

我是ggplot2的新手,我很难用两个因素来为每个基因做一个作图。

我想分别用两个因素来划分每个基因:"cell_type“和”年龄“。

X轴表示“单元格类型”(6)类别,在每个“单元格类型”类别中,应该有5个代表“年龄”类别的条形。Y轴表示基因表达值(均值+误差条).

我的代码:

代码语言:javascript
复制
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

不幸的是,我失去了所有的基因。

我还打算做以下工作:

代码语言:javascript
复制
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)) 

任何建议和帮助如何使它工作是高度赞赏的。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-08-19 09:43:13

从您的示例中很难看出,但在下面的示例中,我将假设您的原始表在每个年龄/基因型组合中都有多行。

首先,史密斯的评论是对的,关于熔体声明。您也可以给变量一个名称,以使事情更清楚。声明应如下:

代码语言:javascript
复制
>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>...

现在你有了正确的数据格式,现在是绘制它的时候了。描述你想要什么总是很困难的,但我想你想要一个面板的网格,基因型从左到右排列,基因从上到下排列。你可能想要考虑点而不是条形图,然后把所有的基因型放在一个地块上,但是下面是你怎么做的。

首先,要绘制的数据是融化后的数据。

代码语言:javascript
复制
> gg <- ggplot(melted)

在x轴上,您需要AGE和y value,因此:

代码语言:javascript
复制
> gg <- gg + aes(x=AGE, y=value)

你需要一个由面板或面组成的网格,所以:

代码语言:javascript
复制
> gg <- gg + facet_grid(Symbol~GENOTYPE)

现在真是个巧妙的把戏。ggplot可以为您处理使用stat_summary进行总结的工作,因此无需事先完成。

代码语言:javascript
复制
> gg <- gg + stat_summary(fun.y=mean, geom="bar", fill="blue")

这就增加了条子。还需要添加错误条,我将定义一个sem函数以使其更整洁:

代码语言:javascript
复制
> 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")

剩下的就是添加您的格式

代码语言:javascript
复制
> 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)) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32083539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档