更改 R 中 ggplot 中组的顺序
Changing the order of the groups in ggplot in R
我正在使用 ggplot
绘制条形图。如何更改栏中组的顺序?在下面的示例中,我希望将 type=1984 作为第一堆条,然后在 1984 之上使用 type=1985,依此类推。
series <- data.frame(
time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)),
type = c(1984:1987),
value = rpois(16, 10)
)
ggplot(series, aes(time, value, group = type)) +
geom_col(aes(fill= type))
使用 series<- series[order(series$type, decreasing=T),]
更改顺序只会更改图例中的顺序,不会更改图中的顺序。
使用 dplyr
中的 desc()
:
ggplot(series, aes(time, value, group = desc(type))) +
geom_col(aes(fill= type))
从 ggplot2 版本 2.2.1 开始,您无需重新排序数据框的行来确定图中堆栈的顺序。
因此,纯 ggplot 方法(作为 tmfmnk 答案的替代方法)将是:
library(ggplot2)
series %>%
ggplot(aes(time, value, group=factor(type, levels=1987:1984)))+
geom_col(aes(fill= factor(type)))+
guides(fill=guide_legend(title="type"))
作为一种好的做法,我建议在将变量 type
绘制为分类变量时使用因子。
结果:
我正在使用 ggplot
绘制条形图。如何更改栏中组的顺序?在下面的示例中,我希望将 type=1984 作为第一堆条,然后在 1984 之上使用 type=1985,依此类推。
series <- data.frame(
time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)),
type = c(1984:1987),
value = rpois(16, 10)
)
ggplot(series, aes(time, value, group = type)) +
geom_col(aes(fill= type))
使用 series<- series[order(series$type, decreasing=T),]
更改顺序只会更改图例中的顺序,不会更改图中的顺序。
使用 dplyr
中的 desc()
:
ggplot(series, aes(time, value, group = desc(type))) +
geom_col(aes(fill= type))
从 ggplot2 版本 2.2.1 开始,您无需重新排序数据框的行来确定图中堆栈的顺序。
因此,纯 ggplot 方法(作为 tmfmnk 答案的替代方法)将是:
library(ggplot2)
series %>%
ggplot(aes(time, value, group=factor(type, levels=1987:1984)))+
geom_col(aes(fill= factor(type)))+
guides(fill=guide_legend(title="type"))
作为一种好的做法,我建议在将变量 type
绘制为分类变量时使用因子。
结果: