在条形图中按两列

时间:2015-10-16 01:54:06

标签: r ggplot2 levels

我想使用ggplot2制作条形图(geom_bar),其中id位于x轴上,N中的值位于y轴上。但是,我希望首先按group排序x轴,然后按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是递增的),具体如下:但是,它不会改变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

1 个答案:

答案 0 :(得分:1)

关键是要安排“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