按两列对条形图中的 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
我想用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