我试图编写一个在最后输出堆叠条形图的函数,该堆叠条形图的条形从一个特定变量的最大百分比到最小百分比排序。我还没有找到执行此操作的通用方法,而我的最终目标是以一种需要最少人工输入的方式来完成此过程。
我的数据看起来像这样
Swimming_style Comfort_level_label Comfort_level_scale n Total_n Percentage
Front Crawl Excellent 3 7 10 70
Front Crawl Good 2 3 10 30
Backstroke Excellent 3 4 10 40
Backstroke Good 2 4 10 40
Backstroke Fair 1 1 10 10
Backstroke Poor 0 1 10 10
Brest stroke Excellent 3 6 10 60
Brest stroke Fair 1 4 10 40
Butterfly Good 2 7 10 70
Butterfly Fair 1 1 10 10
Butterfly Poor 0 2 10 20
到目前为止,这是我的代码:
data <- arrange(data, Comfort_level_label, (Percentage))
data$Swimming_style <- factor(data$Swimming_style, levels = unique(data$Swimming_style))
ggplot(data, aes( x = Swimming_style, y = n, fill = Comfort_level_label)) +
geom_bar(position = "fill",stat = "identity") +
scale_y_continuous(labels = scales::percent_format())+
coord_flip()
哪个输出:
但是我需要做的图表是按优秀等级排序,从最上端的最优秀到最下端的无,或者最下端没有优等,我很难做到这一点。
答案 0 :(得分:2)
这可能有点模棱两可,但是确定优先级时重要的一点是要确保您始终完全拥有每个因素中的一个。
library(dplyr)
SS <- dat %>%
arrange(-Comfort_level_scale, -n) %>%
group_by(Swimming_style) %>%
slice(1) %>%
ungroup() %>%
arrange(Comfort_level_scale, n) %>%
pull(Swimming_style)
library(ggplot2)
dat %>%
mutate(Swimming_style = factor(Swimming_style, levels = SS)) %>%
ggplot(aes( x = Swimming_style, y = n, fill = Comfort_level_label)) +
geom_bar(position = "fill",stat = "identity") +
scale_y_continuous(labels = scales::percent_format()) +
coord_flip()
顺便说一句:Brest stroke
应该是Breast stroke
吗?
library(dplyr)
dat <- read.table(header=TRUE, stringsAsFactors=FALSE, text="
Swimming_style Comfort_level_label Comfort_level_scale n Total_n Percentage
Front_Crawl Excellent 3 7 10 70
Front_Crawl Good 2 3 10 30
Backstroke Excellent 3 4 10 40
Backstroke Good 2 4 10 40
Backstroke Fair 1 1 10 10
Backstroke Poor 0 1 10 10
Brest_stroke Excellent 3 6 10 60
Brest_stroke Fair 1 4 10 40
Butterfly Good 2 7 10 70
Butterfly Fair 1 1 10 10
Butterfly Poor 0 2 10 20") %>%
mutate(Swimming_style = gsub("_", " ", Swimming_style))