2017-04-22 2 views
0

내가 ggplot를 사용하여 다음 데이터를 플로팅하고 레이블 : enter image description hereggplot : geom_bar 스택 순서 및

줄거리 :이 음모의 결과

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

ggplot(df, aes(name,fc), group=variable)+ 
geom_col(aes(fill=factor(as.numeric(fdr)<0.05)), width = 0.98,color="white")+ 
coord_flip()+scale_fill_manual(values = c("FALSE"= "#00BFC4","TRUE"= "#F8766D"))+ 
geom_hline(yintercept = 0, colour = "gray")+ 
geom_text(aes(label=round(fc,2)),angle = 90, position = position_stack(vjust = 0.5), size =3.5, color= "white") 

: ggplot 코드를 사용

df<- data.frame(name= c("g1","g1","p1","p1"),fc = c(-1.32,-2.11,-1.17,-3.23),fdr = c(.0001,.0001,.07,.0002),cond= c("2v1","3v1","2v1","3v1")) 


head(df) 
name fc fdr cond 
g1 -1.32 .0001 2v1 
g1 -2.11 .0001 3v1 
p1 -1.17 .07 2v1 
p1 -3.23 .0002 3v1 

-1.17에 대한 막대가 맨 위에 있고 레이블이 여전히 맨 아래에있는 동안 p1이 뒤집힌 것처럼 보입니다. 회색 막대가 아래쪽에 있고 라벨 중간에 "1.17"이라고 표시하고 싶습니다. 내가 얻을 수있는 도움을 주시면 감사하겠습니다. 감사합니다

답변

1

가능한 한 data.frame의 작도 특성을 설정하는 것이 좋습니다. 그것은 한 층에서 다른 층으로 에이스를 일관되게 유지하는 것을 도울 것입니다. 솔루션에 대한

library(ggplot2) 
library(dplyr) 

df <- data.frame(name = c("g1", "g1", "p1", "p1"), 
       fc = c(-1.32, -2.11, -1.17, -3.23), 
       fdr = c(.0001, .0001, .07, .0002), 
       cond = c("2v1", "3v1", "2v1", "3v1")) 

# use dplyr to set the name and fill factors 
# use the group_by to generate the cumsum for defining where the label should be 
# located. 
df <- 
    df %>% 
    dplyr::mutate(name = factor(name, levels = c("p1", "g1")), 
       fill = factor(fdr < 0.05, c(TRUE, FALSE), c("fdr < 0.05", "fdr >= 0.05"))) %>% 
    dplyr::group_by(name) %>% 
    dplyr::mutate(text_y = -cumsum(-fc)) %>% 
    dplyr::ungroup() 

# the plot 
ggplot(df) + 
    aes(x = name, y = fc, fill = fill) + 
    geom_col(width = 0.98, color="white") + 
    coord_flip() + 
    geom_hline(yintercept = 0, colour = "gray") + 
    geom_text(mapping = aes(y = text_y, label = round(fc, 2)), 
      angle = 90, 
      color = "white", 
      position = position_stack(vjust = 0.5), 
      size  = 3.5, 
      color = "white") 

enter image description here

+0

감사합니다! 나는 당신이 그곳에서 무엇을했는지 확신 할 수 없으므로 dplyr을 한번도 사용하지 않았지만, 매뉴얼에 읽음을 줄 것입니다. 감사! –