使用 position="dodge" 时 ggplot 未正确分组条形图

ggplot is not correctly grouping bars when using position="dodge"

发疯了。我有一个融化的数据框,我试图在 ggplot2:

中的一个简单的分组条形图中显示
modality <- c("CLASS", "CLASS", "ONLINE", "ONLINE", "HYBRID", "HYBRID")
survey <- c("A Pre", "A Post", "B Pre", "B Post", "C Pre", "C Post")
score <- c(3.45, 4.15, 4.12, 4.34, 4.06, 4.57)
df = data.frame(modality, survey, score)

ggplot(df, aes(fill=modality, y=score, x=survey)) +
  geom_bar(position="dodge", stat="identity")

我希望条形图按 模态 分组,但结果如下:

我尝试将其设置得尽可能接近 the example from r-graph-gallery,效果很好。

specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) )
condition <- rep(c("normal" , "stress" , "Nitrogen") , 4)
value <- abs(rnorm(12 , 0 , 15))
data <- data.frame(specie,condition,value)

ggplot(data, aes(fill=condition, y=value, x=specie)) + 
  geom_bar(position="dodge", stat="identity")

结果:

我看不出这两个数据帧的结构有什么不同,但我假设存在一个。我真的很想知道我在这里错过了什么。谢谢!

每个值在 pre 中都是不同的,post 即 'A pre'、'B pre' 等,类似地,'A post'、'B post' 等。如果我们使通过删除保留 'pre/post' 的前缀部分将其分配到一个公共组,然后它将提供与示例中显示的类似输出

library(dplyr)
library(stringr)
library(ggplot2)
df %>% 
   mutate(survey = str_remove(survey, '\D+\s+')) %>% 
   ggplot(aes(fill = modality, y = score, x = survey)) +     
       geom_bar(position = "dodge", stat = "identity")

-输出