r - 在 geom_col 躲避位置中未保留的组内排序
问题描述
我有一个数据框,它是我尝试在下面复制的更大数据集的摘要。我将分数列设置为一个因素,以便图中的命名正确。
我想在分数组和计数列 (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
解决方案
你factor
dscore
但不是theme
. 但是要知道这一点:ggplot2
将从 y 轴原点对它们进行排序,因此您的“BAR before FOO”的顺序更好地表述为“BAR above FOO”或“BAR after FOO”,这意味着因子“FOO before BAR” .
df$theme <- factor(df$theme, levels = rev(c("bar", "foo", "let", "cos")))
# run the 'data' and 'plot' code, unchanged
(这里不是绝对必须使用rev
,它的使用纯粹是示范性的,声明我们认为更重要的东西的顺序——"bar"
在上面——与使用的方向相反ggplot
。)
如果您想要与我更改之前相同的颜色,请添加
... +
scale_fill_manual(values = c(bar="#F8766D", foo="#00BFC4", cos="#7CAE00", let="#C77CFF"))
(我通过使用gg_color_hue(4)
然后重新排序values=
矢量来获得颜色以使其正确。)
推荐阅读
- mpeg-dash - MPEG-DASH:为多比特率视频生成单个 mpd 和相应的片段
- apache-flink - Flink 计划中的 Hash、Forward 等术语是什么意思?
- dask - 对许多镶木地板文件进行 Dask 数据帧重新洗牌
- python - 如何使用 python pandas 创建一个数据透视表,其中列条目以列标题为轴,新列用于空白条目?
- excel - VBA 代码有问题,尽管输入表单中的所有行都已填写,但仍出现警告框
- xaml - ui没有实时更新
- google-bigquery - 如何在 BigQuery 中捕获 ST_MAKEPOLYGON 错误
- python - 操作每个列名的熊猫数据框值
- jquery - 如何通过滚动增加 div 高度?
- visual-studio-code - vscode调试python scrapy没有进入回调函数