使用 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 制作堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章