ggplot2:如何在条形图旁边移动y轴标签

时间:2017-04-23 19:25:48

标签: ggplot2

我正在使用以下可重复的数据集:

df<- data.frame(name=c(letters[1:10],letters[1:10]),fc=runif(20,-5,5)
            ,fdr=runif(20),group=c(rep("gene",10),rep("protein",10)))

用于绘图的代码:

df$sig<- ifelse(df$fdr<0.05 & df$fdr>0 ,"*","") 
ggplot(df, aes(x=reorder(name,fc),fc))+geom_col(aes(fill=group),position = "dodge",width = 0.9)+
  coord_flip()+
  geom_text(aes(label = sig),angle = 90, position = position_stack(vjust = -0.2), color= "black",size=3)+

  scale_y_continuous(position = "right")+
  scale_fill_manual(values = c("gene"= "#FF002B","protein"="blue"))+
  geom_hline(yintercept = 0, colour = "gray" )+
  theme(legend.position="none", axis.title.y=element_blank(), 
    axis.title.x=element_blank(),
    axis.text.y=element_text(),
    axis.line=element_line(color="gray"),axis.line.y=element_blank(),
    axis.ticks.y=element_blank(),
    panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),plot.background=element_blank())

导致以下情节:  enter image description here

我希望将它们放在靠近条形的位置,而不是在左侧放置y轴标签。我想模仿本质上发布的这张图表: https://www.nature.com/articles/ncomms2112/figures/3

enter image description here

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

df<- data.frame(name=c(letters[1:10],letters[1:10]),fc=runif(20,-5,5)
                ,fdr=runif(20),group=c(rep("gene",10),rep("protein",10)))

df$sig<- ifelse(df$fdr<0.05 & df$fdr>0 ,"*","") 


df$try<-c(1:10,1:10) #assign numbers to letters

x_pos<-ifelse(df$group=='gene',df$try-.2,df$try+.2) #align letters over bars
y_posneg<-ifelse(df$fc>0,df$fc+.5,df$fc-.5) #set up y axis position of letters


ggplot(df, aes(x=try,fc))+geom_col(aes(fill=group),position = "dodge",width = 0.9)+
  coord_flip()+
  geom_text(aes(y=y_posneg,x=x_pos,label = name),color= "black",size=6)+
  scale_y_continuous(position = "right")+
  scale_fill_manual(values = c("gene"= "#FF002B","protein"="blue"))+
  geom_hline(yintercept = 0, colour = "gray" )+
  theme(legend.position="none", axis.title.y=element_blank(), 
        axis.title.x=element_blank(),
        axis.text.y=element_blank(),
        axis.line=element_line(color="gray"),axis.line.y=element_blank(),
        axis.ticks.y=element_blank(),
        panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),plot.background=element_blank())

给出:

enter image description here

或许这个?

x_pos<-ifelse(df$group=='gene',df$try-.2,df$try+.2) #align letters over bars    
y_pos<-ifelse(df$fc>0,-.2,.2) #set up y axis position of letters


    ggplot(df, aes(x=try,fc))+geom_col(aes(fill=group),position = "dodge",width = 0.9)+
      coord_flip()+
      geom_text(aes(y=y_pos,x=x_pos,label = name),color= "black",size=3)+
      scale_y_continuous(position = "right")+
      scale_fill_manual(values = c("gene"= "#FF002B","protein"="blue"))+
      geom_hline(yintercept = 0, colour = "gray" )+
      theme(legend.position="none", axis.title.y=element_blank(), 
            axis.title.x=element_blank(),
            axis.text.y=element_blank(),
            axis.line=element_line(color="gray"),axis.line.y=element_blank(),
            axis.ticks.y=element_blank(),
            panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
            panel.grid.minor=element_blank(),plot.background=element_blank())

给出:

enter image description here