我打算根据变量中级别的频率按降序绘制数据框中的每个分类列。
我已经找到了如何绘制每一列并重新排序级别,但我不知道如何将它们组合在一起。您能给我一些建议吗?
绘制每列的代码:
require(purrr)
library(tidyr)
library(ggplot2)
diamonds %>%
keep(is.factor) %>%
gather() %>%
ggplot(aes(value)) +
facet_wrap(~ key, scales = "free") +
geom_bar()
对一个变量的级别重新排序的代码:
tb <- table(x)
factor(x, levels = names(tb[order(tb, decreasing = TRUE)]))
顺便说一句,如果您觉得有更好的方法编写这些代码,请告诉我。
谢谢。
替代方案1
无需使用gridExtra
效仿facet_wrap
,只需包含该函数reorder_size
inside aes
:
reorder_size <- function(x) {
factor(x, levels = names(sort(table(x), decreasing = TRUE)))
}
diamonds %>%
keep(is.factor) %>%
gather() %>%
ggplot(aes(x = reorder_size(value))) +
facet_wrap(~ key, scales = "free") +
geom_bar()
替代方案2
Using dplyr
计算按键和值分组的计数。然后我们reorder
按内部计数降序排列的值aes
.
library(dplyr)
diamonds %>%
keep(is.factor) %>%
gather() %>%
group_by(key,value) %>%
summarise(n = n()) %>%
ggplot(aes(x = reorder(value, -n), y = n)) +
facet_wrap(~ key, scales = "free") +
geom_bar(stat='identity')
Output
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)