2015-08-18 3 views
0

Я новичок в ggplot2, и у меня возникают трудности с созданием барплота для каждого гена на 2 фактора.barplot с ggplot2 для выражения гена

Я хотел бы построить каждый ген отдельно двумя факторами: «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

на основе описания, кажется, например, ваш 'id.vars' должен включать' AGE', а также 'GENOTYPE'. – aosmith

+0

Добро пожаловать в SO!Пожалуйста, сделайте полностью [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), что увеличит вероятность того, что вы получите полный ответ , – tonytonov

ответ

0

Это трудно понять из вашего примера, но в нижеследующем я собираюсь предположить, что ваш исходный стол имеет более одной строки для каждой комбинации возраста/генотипа.

Первый аосмит в комментариях касается утверждения о расплаве. Вы также можете дать переменной имя, чтобы сделать вещи более ясными. Заявление должно быть:

>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) 

На оси х вы хотите AGE и на у 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") 

, который добавляет бары. Кроме того, необходимо добавить errorbars, я собираюсь определить функцию сем, чтобы сделать его аккуратнее:

> 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)) 
+0

Спасибо Яну очень. Он работает так, как я хотел. 'ggplot (расплавленный [расплавленный $ Symbol ==" APP ",], aes (x = AGE, y = значение) + stat_summary (fun.y = mean, geom =" bar ", fill =" blue ") + facet_grid (~ GENOTYPE) 'Я могу сделать сюжет для любого интересующего гена. К сожалению, функция бара ошибки не работает. Должен ли я заменить x на значение символа гена? Большое спасибо. – alakatos

+0

Извините, мой плохой. 'отредактировал параметры stat_summary. Теперь нужно работать. –

Смежные вопросы