r - R ggplot geom_col 绘制一个变量的比例
问题描述
我有一个数据框:
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" )
)
谢谢
解决方案
这是你要找的吗?
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" )
推荐阅读
- jenkins - IntelliJ、Groovy、Jenkins 和未解决的访问
- apache-spark - Pyspark 中两个数组相减得到一个新数组
- python - 为什么在 python 中使用 OrderedDict 有缺点?
- html - 更改弹出菜单按钮的颜色
- amazon-web-services - 将用户数据文件传递给 lamda 以创建 ec2
- java - 比较java中数组的元素
- rally - 如何创建自定义视图,显示我有任务的所有用户故事
- javascript - 如何将类添加到动态创建的元素?
- angular - 是否可以通过 url 从 angular 获取页面 html 内容
- windows - Windows shell 将项目添加到受保护的文件夹 {2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}