我有一个数据框,它是我尝试在下面复制的更大数据集的摘要。我将分数列设置为一个因素,以便图中的命名正确。
我想在分数组和计数列 (n) 的组内对这个数据框进行排序。因此,我想使用 ggplot 显示我的水平条的顺序:在 X 轴上(或输出中的 Y,因为它的翻转/水平条)上的从min
到(图表的底部到顶部),以及在分数组内,开始max
从分数组中,count ( )min
的降序排列。n
应该为下一组(即)保留相同的顺序,但是可以根据它们的计数( )值low
插入未出现在前一个乐谱中的主题。n
我尝试对我的数据框进行排序,但我的结果不是我所期望的。例如,第 5 行和第 6 行应该在我的排序数据框中切换,因为cos
之前出现foo
在上一个分数(即min
)中。我尝试使用 reorder 和 forcats 更改因子级别顺序,但没有任何程度......
require(tidyverse)
df = tribble(
~score, ~ theme, ~ n,
5, "foo", 1,
5, "bar", 1,
4, "let", 3,
3, "let", 1,
3, "cos", 1,
3, "foo", 2,
2, "foo", 3,
2, "let", 4,
2, "cos", 5
)
data = df %>%
group_by(score, theme) %>%
arrange(desc(score), n) %>%
mutate_at("score", function(x) factor(x, levels = c(1, 2, 3, 4, 5), labels = c("min", "low", "avg", "high", "max")))
data
plot = data %>%
ggplot(mapping = aes(x = score, y = n, fill = theme)) +
geom_col(position = position_dodge2(width = 0.9, preserve = "single")) +
coord_flip() +
scale_y_continuous(expand = expansion(mult = c(0, .1))) +
guides(fill = guide_legend(ncol = 2, byrow = TRUE)) +
labs(y = "n", x = "scoring", fill = "vars")
plot
我的预期图表将是:
MAX BAR (<- unsure since equal)
MAX FOO
HIGH LET
AVG FOO
AVG LET
AVG COS
LOW FOO
LOW LET
LOW COS