【发布时间】:2017-01-26 11:19:12
【问题描述】:
我正在尝试生成许多单独的图,每个图都绘制每个细胞(=行)的单个基因(=列)的水平。在代码中,我还有两个“单元格”子集,这取决于每个单元格的gene1 是否具有> 0 的值(这由dplyr 处理)。
我在下面的尝试将所有基因/列的值绘制在一个 pdf 图中,一次。关于如何更改代码以为每个基因/列生成一个图的任何建议?
数据集:
gene1 gene2 gene3 gene4 gene5
cell_1 0.0000 0.279204 25.995400 46.171700 94.234100
cell_2 0.0000 23.456000 77.339800 194.241000 301.234000
cell_3 2.0000 13.100000 45.309200 0.776565 0.000000
cell_4 0.0000 10.500000 107.508000 3.032500 0.000000
cell_5 3.0000 0.000000 0.266139 0.762981 123.371000
代码:
library(ggplot2)
library(dplyr)
library(tidyr)
#Loop making many single box plots
df3 <- df2 %>% as.data.frame %>% mutate(Cell= rownames(.), positive = df2$gene1>0) %>%
gather(., key= gene, value="value", -Cell,-positive) %>%
mutate( absolute= abs(value), logabs= log(absolute+1))
for (i in unique(df3$gene)) {
geneplot <- df3 %>% ggplot(., aes(x=gene, y=logabs, fill=positive)) +
geom_boxplot() +
xlab("Gene") + ylab("Expression level (TPM log)") +
theme_classic(base_size = 14, base_family = "Helvetica") +
theme(axis.text.y=element_text(size=14)) +
theme(axis.title.y=element_text(size=14, face="bold")) +
theme(axis.text.x=element_text(size=14)) +
theme(axis.title.x=element_text(size=14, face="bold")) +
scale_fill_brewer(palette="Pastel1")
print(geneplot)
ggsave(sprintf("%s.png", df3$gene))
dev.off()
}
【问题讨论】: