使用 ggplot2 制作堆积条形图

Posted

技术标签:

【中文标题】使用 ggplot2 制作堆积条形图【英文标题】:Making stacked bar plots using ggplot2 【发布时间】:2022-01-12 17:18:31 【问题描述】:

我对在 R 中制作漂亮的图有点陌生。现在我想制作堆积条形图。以下是堆积条形图的代码:

longer_data = structure(list(question = 
c("HMI1_Speed_and_distance_control", 
"HMI2_Supercruise_Speed_and_distance_control", 
"HMI3_Speed_and_distance_control", "HMI4_Speed_and_distance_control", 
"HMI5_Speed_and_distance_control", "HMI6_Speed_and_distance_control", 
"HMI1_Speed_and_distance_control", 
"HMI2_Supercruise_Speed_and_distance_control", 
"HMI3_Speed_and_distance_control", 
"HMI4_Speed_and_distance_control"), response = c(3L, 3L, 1L, 1L, 2L,
 1L, 2L, 3L, 1L, 3L)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))
longer_data %>% 
  ggplot(aes(x = response)) +
    geom_bar()+
    facet_wrap(vars(question), ncol = 3) +
    labs(x = "Response (on a 1 to 5 scale)", y = "Number of respondents")

我希望每个图形的三个横条彼此叠放,而不是彼此相邻。 我该怎么做?

谢谢!

【问题讨论】:

这很令人困惑,因为geom_bar 中的position = "stack" 是默认值。你能分享一些可重复的数据吗?旋转数据后调用您的数据pivoted_data 并给我们dput(pivoted_data[1:10, ]) 以获取前 10 行数据的复制/可粘贴版本,包括所有类和结构信息。 (或选择不同的说明性子集)。 谢谢!但是,我这样做了,没有任何改变!还有其他想法吗? 调用:dput(longer_data[1:10, ]) 结构(list(question = c("HMI1_Speed_and_distance_control", "HMI2_Supercruise_Speed_and_distance_control", "HMI3_Speed_and_distance_control", "HMI4_Speed_and_distance_control", "HMI5_Speed_and_distance_control", "HMI6_Speed_and_distance_control ", "HMI1_Speed_and_distance_control", "HMI2_Supercruise_Speed_and_distance_control", "HMI3_Speed_and_distance_control", "HMI4_Speed_and_distance_control"), 响应 = c(3L, 3L, 1L, 1L, 2L, 1L, 2L, 3L, 1L, 3L)), row.names = c (NA, -10L), class= c("tbl_df", "tbl", "data.frame")) 我听从了你的建议。这是你的意思吗? 那很好,我把它放在你的问题中并格式化了文本。现在,为了你的目标——我在每个响应的每个方面都看到一个条,因为你有x = response。你说你想要堆叠条形 - 你想使用填充颜色来区分不同的响应值,还是类似的东西? 【参考方案1】:

我创建了一个因子变量并关闭了 facet wrap

    longer_data$question<- factor(longer_data$question)                     
    
    longer_data %>% 
      ggplot(aes( x=response, fill=question)) +
      geom_bar(stat="count")+
     # facet_wrap(vars(question), ncol = 3) +
      labs(x = "Response (on a 1 to 5 scale)", y = "Number of respondents")

【讨论】:

非常感谢!如果我还有更多的cmets,我会告诉你的!【参考方案2】:

我猜测 1 是 Yes,2 是 No,3 是不知道,如果需要,你应该更正这些。

longer_data %>% 
  mutate(response = factor(response, levels = 1:3, labels = c("Yes", "No", "Don't Know"))) %>%
  ggplot(aes(x = question, fill = response)) +
  geom_bar()+
  scale_fill_manual(values = c("Yes" = "forestgreen", "No" = "firebrick2", "Don't Know" = "purple")) +
  theme(axis.text.x = element_text(angle = -90, hjust = 0))

【讨论】:

非常感谢!我现在正在运行此代码,但不明白为什么我现在每个问题都有四个响应类别(另外一个灰色),即使我有三个响应类别。有什么想法吗? 你好,我对你的身材还有一点意见。首先,再次感谢。为什么所有条中只有两个响应类别,而图例具有三个响应选项(我从数据中知道所有三个响应都有数据)?非常感谢 因为我只有前10行数据。 嗨 Gregor,你现在知道如何在堆积条形图中添加百分比了吗? 在 [ggplot2] 标签中搜索“堆叠条形百分比标签”、***.com/q/12386005/903061、***.com/q/47936123/903061、***.com/a/55208869/903061、***.com/a/43488370/903061

以上是关于使用 ggplot2 制作堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2:3路交互堆积条形图的分组条形图

在堆积条形图中反转 geom_text() (ggplot2)

将百分比标签添加到堆积条形图ggplot2

ggplot2 和带有负值的堆积条形图

在 ggplot2 中的堆积条形图上显示数据值

在 ggplot2 中的堆积条形图上显示数据值