按两列对条形图中的 x 轴元素进行排序

Order x-axis elements in barchart by two columns

我想用ggplot2制作条形图(geom_bar),其中id在x轴上,N中的值在y轴上.但是,我希望 x 轴首先按 group 排序,然后按 N.

降序排列
id    N    group
1     1    A
2     2    A
3     1    A
4     5    A
5     2    A
6     3    B
7     15   B
8     4    B
9     15   C
10    1    C

id 列级别为:

Levels: 4, 2, 5, 3, 1, 7, 8, 6, 9, 10

我能够使用以下命令按所需顺序(N 升序除外)对数据 table 重新排序;但是,它不会改变 id 的水平,这似乎需要改变 id 在 x 轴上绘制的顺序:

dt <- dt[with(dt, order(group, factor(N, order(group)))), ]

下面是我要查找的订单的表示。

id    N    group
4     5    A
2     2    A
5     2    A
3     1    A
1     1    A
7     15   B
8     4    B
6     3    B
9     15   C
10    1    C

关键是'id'列的层级排列

id <- 1:10
N <- c(1,2,1,5,2,3,15,4,15,1)
group <- c(rep("A", 5), rep("B", 3), rep("C", 2))

df <- data.frame(id, N, group, stringsAsFactors = FALSE)

df$id <- factor(df$id, levels=df$id[order(df$group, -df$N)])
df
#   id  N group
# 1   1  1     A
# 2   2  2     A
# 3   3  1     A
# 4   4  5     A
# 5   5  2     A
# 6   6  3     B
# 7   7 15     B
# 8   8  4     B
# 9   9 15     C
# 10 10  1     C
df$id
# [1] 1  2  3  4  5  6  7  8  9  10
# Levels: 4 2 5 1 3 7 8 6 9 10