2017-04-21 14 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

相關問題