我的问题是我想对使用geom_bar(position = "fill"
生成的ggplot输出中的因子进行重新排序,以使正类的最高比例最接近y轴。我设法找到了一个可行的解决方案,但从我的研究看来,似乎有一个更有效的解决方案潜伏,尽管我似乎找不到。
我已经阅读了问题Order Bars in ggplot2 bar graph,但似乎找不到按比例排序的解决方案,即按数据框中未明确显示的值进行汇总,而是一种汇总状态。
我看过Modifying Factor Order section of the book, R for Data Science,并提出了一种解决方案,其中使用“ prop”列生成摘要数据帧,并使用fct_reorder2()
根据这些值创建折线图。但是,我似乎无法对“填充”条形图应用类似的逻辑。
我最终遇到的解决方案来自此来源#267 REORDER A VARIABLE IN GGPLOT2,您只需使用mutate()
设置新的因子水平。但是,我创建了一个数据框,而不是自己定义顺序,而是按正类的比例对因子进行排序。
我想知道的是,是否有一种更有效的方法(也许是在长管道操作中)?
这是一个可重复的示例:
library(ggplot2)
library(dplyr)
variable <- c(rep("alpha", 4),
rep("beta", 4),
rep("gamma", 4),
rep("delta", 4))
class <- c(rep("1", 4),
"1", "1", "0", "0",
rep("0", 3), "1",
rep("1", 3), "0")
dframe <- data.frame(variable, class)
plot_order <- dframe %>%
count(variable, class) %>%
group_by(variable) %>%
mutate(prop = prop.table(n)) %>%
filter(class == "1") %>%
arrange(prop)
lvls <- as.character(plot_order$variable)
dframe %>%
mutate(variable = factor(variable, levels = lvls)) %>%
ggplot(aes(x = variable, fill = class)) +
geom_bar(position ="fill") +
labs(y = "Proportion")
这是plot_order
的输出:
# A tibble: 4 x 4
# Groups: variable [4]
variable class n prop
<fct> <fct> <int> <dbl>
1 alpha 1 4 1
2 delta 1 3 0.75
3 beta 1 2 0.5
4 gamma 1 1 0.25
结果:
条形图,其基于位置“填充”的有序因子
谢谢。