【问题标题】:Change factor order in only 1 bar with ggplot使用 ggplot 仅在 1 条中更改因子顺序
【发布时间】:2025-12-07 18:05:01
【问题描述】:

我试图在 ggplot 2 中仅在 1 个栏中反转因子顺序。重新排序数据而不将它们定义为因子通常有效,但在最新版本中无效。

示例: 我想反转最后一列中的因子(绿色向上,红色向下)。

library(ggplot2)

dados <- expand.grid(a = letters[1:5], b = letters[1:2])
dados$a <- paste(dados$a)
dados$b <- paste(dados$b)
dados$val <- rnorm(10, 5, 1)
ggplot(aes(x = a, y = val, fill = b), data = dados) + geom_bar(stat = 'identity')

dados2 <- rbind(tail(dados, -1), head(dados, 1))
ggplot(aes(x = a, y = val, fill = b), data = dados2) + geom_bar(stat = 'identity') # Used to work :/

【问题讨论】:

  • 一个想法是为最后一列添加一个不同的层(我知道这很烦人),但我不知道是否有让堆叠顺序遵循数据中的顺序。跨度>

标签: r ggplot2 bar-chart


【解决方案1】:

我在column b 中为e 分配了两个附加参数,见下文cd

    a b    val
2  b a 4.504735
3  c a 5.396658
4  d a 6.796288
5  e c 5.900308
6  a b 3.900510
7  b b 4.454316
8  c b 5.411198
9  d b 6.389902
10 e d 4.458425
1  a a 4.986175

by scale_fill_manual 我把这两种颜色颠倒了

ggplot(aes(x = a, y = val, fill = b), data = dados2) + 
  geom_bar(stat = 'identity') +
  scale_fill_manual(values = c("a"= "red", "b"= "green",'c'= "green", "d"="red"))

【讨论】: