r - 如何通过多个变量重新排序条形图

标签 r ggplot2

我想制作一个条形图并根据 GradeScore 对条形图进行排序。对不起,我的问题可能听起来很傻。我知道如何按一个变量 le 排序,但不是两个。谁能教教我?

df<-structure(list(ID = c("A1-18-603", "A1-19-604", "A2-20-605", 
"A1-21-606", "A1-22-607", "A2-16-601", "A5-17-602", "A1-14-502", 
"A1-15-503", "A1-13-501", "A5-12-403", "A2-10-401", "A1-11-402", 
"A2-07-301", "A5-08-302", "A3-09-303", "A1-06-203", "A1-05-202", 
"A3-04-201", "A1-02-102", "A6-03-103", "A1-01-101"), Score = c(33.58, 
12.88, 12.65, 12.19, 11.5, 9.66, 3.45, 26.22, 13.11, 11.96, 78.42, 
38.64, 16.1, 54.74, 12.88, 9.2, 114.53, 25.76, 22.54, 15.87, 
13.11, 6.67), Grade = c("6", "6", "6", "6", "6", "6", "6", "5", 
"5", "5", "4", "4", "4", "3", "3", "3", "2", "2", "2", "1", "1", 
"1")), row.names = c(NA, -22L), class = "data.frame")

ggplot(data = df)  +
    geom_bar(aes(y =  reorder(ID, desc(Grade)),  x = Score, fill = Grade), stat = "identity",  width = 0.8)

我可以按等级排序,但不知道如何进一步按Score排序。

enter image description here

最佳答案

试试这个经典技巧:

library(tidyverse)
df %>%
  mutate(reord = as.numeric(Grade) + as.numeric(Score),
         ID = fct_reorder(ID, reord, .desc = F)) %>% 
  ggplot() +
  geom_bar(aes(y =  reorder(ID, desc(Grade)),  x = Score, fill = Grade), stat = "identity",  width = 0.8)

使用 tidyverse 中的 forcats 包创建一个按 as.numeric(Grade) + as.numeric(Score) 排序的变量,然后在 geom_bar 调用中,按单个变量 reorder

您可以在完成后从数据中删除 reord 变量,因为它只是一个临时辅助变量。

enter image description here

关于r - 如何通过多个变量重新排序条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72411477/

相关文章:

r - 在不同图中的 geom_bar 中指定颜色

r - 我可以使用 ggplot 分别控制 x 和 y 轴吗?

r - 堆叠条形图的颜色取决于向量的数量和长度

r - 时间轴上刻度子集的日期格式

r - 将字体大小调整为绘图设备的大小

r - 如何让 ggplot 正确排序构面?

重定向 R 输出和图形

r - dplyr:将每个变量的多个 `count` + `mutate` 语句组合成单个语句

r - 在 purrr 中处理不同长度的向量

r - 在R中使用geom_rect进行时间序列着色