2017-04-21 72 views
0

我正在使用ggplot在for循环中绘制并保存多个图,循环遍历列表。样品列表中的元素是这样的:ggplot2:如何手动修复出现条的顺序

head(genes[[1]]) 

name    fc     fdr 
gene1   -2.0143529    0.0002 
protein1  -3.2256188    0.0001 

我用下面的代码绘制:

p<-list() 
for(i in 1:length(genes)){ 
p[[i]]<-ggplot(genes[[i]], aes(name,fc, label= name))+ 
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+ 
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D")) 

省略额外的代码与格式交易。最后的情节是这样的: enter image description here

现在的问题是,我使用的for循环绘制了这些地块的100和我想的基因(第一行中的列表元素)一直保持到成为最棒的蛋白质和蛋白质,因为我省略了所有的标签,并计划在所有的地块中使用一个图例。但是,ggplot会不断切换不同地块之间的酒吧顺序。有没有办法确保这种情况不会发生,并且基因始终保持在最佳状态? 谢谢, Shash

回答

1

ggplot将按字母顺序排列酒吧名称。

例如

library(ggplot2) 

df <- data.frame(name = c("A-gene", "B-protein"), fc = c(-2.2, -3.2), fdr = c(0.2, 0.003)) 

ggplot(df, aes(name,fc, label= name))+ 
    geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+ 
    coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D")) 
dev.off() 

Bars Alphabetically Ordered

要获得您所需要的顺序吧,使名称可变的因素,并设置级别的顺序。只有两个人的名字,你可以按照如下

library(ggplot2) 
df <- data.frame(name = c("A-gene", "B-protein"), fc = c(-2.2, -3.2), fdr = c(0.2, 0.003)) 

df$name <- relevel(df$name, as.character(df$name[2])) 

ggplot(df, aes(name,fc, label= name))+ 
    geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+ 
    coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D")) 
dev.off() 

这使得第二排(蛋白质)旁边的原点栏中使用relevel

Order changed

相关问题