2017-04-21 6 views
0

for 루프에서 ggplot을 사용하여 여러 개의 플롯을 플롯하고 저장하는 중입니다.이 루프는 목록을 반복합니다. 샘플 목록 요소는 다음과 같다 : 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은 다른 플롯간에 막대의 순서를 계속 전환합니다. 그 일이 일어나지 않고 유전자가 항상 맨 위에 머물러 있는지 확인하는 방법이 있습니까? 감사합니다. 셰이드

답변

1

ggplot은 알파벳순으로 이름순으로 주문합니다.

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

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() 
예를

를 들어

는 필요한 순서대로 줄을 얻을 이름 변수를 요인을 확인하고 레벨의 순서를 설정합니다.

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