【问题标题】:R ggplot geom_col plot propotion of one variableR ggplot geom_col 绘制一个变量的比例
【发布时间】:2021-03-10 20:16:13
【问题描述】:

我有一个数据框:

df_silencer <- data.frame(
  group = c("inside_boundaries", "outside_boundaries","inside_boundaries", "outside_boundaries","inside_boundaries", "outside_boundaries","inside_boundaries", "outside_boundaries","inside_boundaries", "outside_boundaries"),
  value = c(18, 408,43,850,36,594,118,1831,1232,22765),
  cond = c('pef1a','pef1a','ppgk','ppgk','prag2','prag2','pscp1','pscp1','DHS','DHS')
)

我试图仅绘制“内部边界”的比例,而不是 inside_boundaries 和 outside_boundaries。

这给了我 100% 的内部 + 外部的比例。我正在尝试仅绘制 inside_boundaries 比例

(boundaries_percentage=
    ggplot(df_silencer, 
           aes(x = cond,y = value,color=cond,fill=forcats::fct_rev(as.factor(group)))) +
    geom_col(size=0.7,alpha=0.5,width = 0.7,position = 'fill')+  
    scale_color_manual(name="Condition",breaks = c("pef1a", "ppgk", "prag2","pscp1",'DHS'),
                       values=c("#FFCC33", "#339900", "#FF3333","#3333FF","black"))+
    scale_fill_manual(name="group",breaks = c("inside_boundaries","outside_boundaries"),
                      values=c("#d6d4d4","#ffffff"))+
    scale_x_discrete(limits=c("DHS","pscp1", "ppgk", "pef1a","prag2"))+
    scale_y_continuous(labels=c("0", "25","50","75","100"))+
    theme_classic()+
    theme(text = element_text(size=6),axis.title.x = element_blank())+
    guides(color=F)+
    labs(y="% inside vs outside boundaries" )
)

谢谢

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这就是你要找的吗?

    df_silencer %>% 
      group_by(cond) %>% 
      mutate(pct = value/sum(value)) %>% 
      filter(group == "inside_boundaries") %>% 
    ggplot(aes(x = cond,y = pct,color=cond, fill=cond)) +
      geom_bar(stat="identity") +  
      scale_color_manual(name="Condition",breaks = c("pef1a", "ppgk", "prag2","pscp1",'DHS'),
                         values=c("#FFCC33", "#339900", "#FF3333","#3333FF","black"))+
      scale_fill_manual(name="Condition",breaks = c("pef1a", "ppgk", "prag2","pscp1",'DHS'),
                        values=c("#FFCC33", "#339900", "#FF3333","#3333FF","black"))+
      scale_x_discrete(limits=c("DHS","pscp1", "ppgk", "pef1a","prag2"))+
      scale_y_continuous(labels=scales::label_percent(accuracy=1))+
      theme_classic()+
      theme(text = element_text(size=6),axis.title.x = element_blank())+
      guides(color=F, fill=F)+
      labs(y="% inside vs outside boundaries" )
    


    编辑:在条形图上添加百分比数字

    df_silencer %>% 
      group_by(cond) %>% 
      mutate(pct = value/sum(value)) %>% 
      filter(group == "inside_boundaries") %>% 
    ggplot(aes(x = cond,y = pct,color=cond, fill=cond)) +
      geom_bar(stat="identity") +  
      geom_text(aes(label=sprintf("%.1f%%", pct*100)), position=position_nudge(y=.0015)) + 
      scale_color_manual(name="Condition",breaks = c("pef1a", "ppgk", "prag2","pscp1",'DHS'),
                         values=c("#FFCC33", "#339900", "#FF3333","#3333FF","black"))+
      scale_fill_manual(name="Condition",breaks = c("pef1a", "ppgk", "prag2","pscp1",'DHS'),
                        values=c("#FFCC33", "#339900", "#FF3333","#3333FF","black"))+
      scale_x_discrete(limits=c("DHS","pscp1", "ppgk", "pef1a","prag2"))+
      scale_y_continuous(labels=scales::label_percent(accuracy=1))+
      theme_classic()+
      theme(text = element_text(size=6),axis.title.x = element_blank())+
      guides(color=F, fill=F)+
      labs(y="% inside vs outside boundaries" )
    

    【讨论】:

    • 如何在绘图上添加百分比标签?谢谢
    • 您的意思是在 y 轴上还是要将它们添加到其他位置。如果在 y 轴上,应该这样做:scale_y_continuous(labels=scales::label_percent(accuracy=1))
    • 例如打印条上的%。谢谢
    • 我将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多