为什么我的 ggplot 条形图位于两个单独的网格上?

Why my ggplot bars are on two separate grids?

这是来自 an online example on Hidden Markov Models。 有代码

  library(ggplot2)
    library(gridExtra)
    library(reshape2)
   
 ggplot(hmm1$draws, aes(x = as.numeric(roll), y = state, fill = state, col = state)) +  
      geom_bar(stat = "identity", alpha = I(0.7))  +
      scale_fill_manual(values = mycols, name = "State:\nPerson that\nrolled the\ndice", labels = c("Alice", "Bob")) +
      scale_color_manual(values = mycols, name = "State:\nPerson that\nrolled the\ndice", labels = c("Alice", "Bob")) +
      theme(axis.ticks = element_blank(), axis.text.y = element_blank()) +
      labs(y = "Actual State")

他们应该产生以下结果

但我发现条形图“重叠”,位于两条不同的线上

我不知道这是否取决于编码(我尝试了不同的选项但没有任何改变)或我的 R 上设置的一些参数。有什么建议吗?

您需要在 y 轴上将状态表示为数字才能在当前版本的 ggplot 下正常工作:

ggplot(draws, aes(x = roll, y = as.numeric(as.factor(state)), 
                  fill = state, col = state)) + 
        geom_bar(stat = "identity", alpha = I(0.7)) + 
        scale_fill_manual(values = mycols, 
                          name = "State:\nPerson that\nrolled the\ndice", 
                          labels = c("Alice", "Bob")) +
        scale_color_manual(values = mycols, 
                           name = "State:\nPerson that\nrolled the\ndice", 
                           labels = c("Alice", "Bob")) +
        labs(y = "State") +
        theme(axis.ticks = element_blank(), axis.text.y = element_blank())

数据

draws <- structure(list(roll = 1:100, state = c("alice", "alice", "alice", 
"alice", "alice", "alice", "alice", "alice", "alice", "bob", 
"bob", "bob", "bob", "bob", "bob", "bob", "bob", "alice", "alice", 
"alice", "alice", "alice", "bob", "bob", "alice", "alice", "alice", 
"alice", "alice", "alice", "alice", "alice", "bob", "bob", "bob", 
"bob", "bob", "bob", "alice", "alice", "alice", "alice", "alice", 
"bob", "bob", "alice", "alice", "alice", "alice", "bob", "alice", 
"alice", "alice", "alice", "alice", "alice", "alice", "alice", 
"alice", "bob", "bob", "bob", "bob", "bob", "bob", "bob", "bob", 
"bob", "bob", "bob", "bob", "bob", "bob", "bob", "bob", "bob", 
"bob", "bob", "bob", "bob", "alice", "alice", "alice", "alice", 
"bob", "alice", "alice", "alice", "alice", "bob", "bob", "bob", 
"bob", "bob", "bob", "bob", "bob", "bob", "bob", "bob"), obs = c(8L, 
9L, 3L, 7L, 3L, 5L, 10L, 4L, 7L, 8L, 7L, 15L, 17L, 14L, 14L, 
12L, 11L, 6L, 4L, 2L, 4L, 5L, 10L, 14L, 3L, 4L, 4L, 6L, 3L, 4L, 
2L, 6L, 12L, 14L, 15L, 12L, 8L, 12L, 2L, 3L, 7L, 3L, 4L, 8L, 
14L, 1L, 3L, 2L, 2L, 15L, 4L, 4L, 3L, 7L, 7L, 4L, 3L, 6L, 4L, 
13L, 18L, 9L, 12L, 13L, 13L, 10L, 10L, 12L, 13L, 15L, 12L, 11L, 
12L, 12L, 9L, 11L, 13L, 16L, 7L, 7L, 1L, 4L, 5L, 6L, 7L, 1L, 
5L, 3L, 3L, 12L, 12L, 12L, 10L, 12L, 6L, 6L, 10L, 12L, 7L, 5L
), dice = c(5L, 9L, 8L, 9L, 6L, 8L, 8L, 10L, 4L, 7L, 7L, 9L, 
7L, 7L, 7L, 5L, 3L, 8L, 10L, 11L, 10L, 2L, 7L, 2L, 5L, 10L, 12L, 
9L, 6L, 6L, 8L, 4L, 10L, 5L, 5L, 7L, 6L, 2L, 7L, 9L, 11L, 7L, 
3L, 9L, 2L, 7L, 7L, 12L, 2L, 4L, 7L, 6L, 6L, 10L, 5L, 10L, 6L, 
11L, 2L, 6L, 10L, 6L, 9L, 7L, 10L, 11L, 8L, 7L, 12L, 9L, 10L, 
5L, 8L, 7L, 5L, 5L, 6L, 11L, 9L, 4L, 6L, 7L, 6L, 2L, 4L, 12L, 
7L, 7L, 2L, 7L, 6L, 9L, 6L, 6L, 7L, 8L, 6L, 7L, 11L, 7L)), 
class = "data.frame", row.names = c(NA, -100L))