【问题标题】:ggplot2, one barplot, multiple variablesggplot2,一个条形图,多个变量
【发布时间】:2021-07-26 03:16:56
【问题描述】:

我正在对调查中的定性数据进行编码,并且正在尝试制作一个 ggplot2 条形图。

这些项目是开放式问题。例如,一个问题/项目是“您的社区提供哪些心理健康服务?”。

例如该示例的每个问题/项目都是我的数据表中的列。对于每个项目,我都创建了额外的列,以将原始的开放式响应编码为二分响应变量。

例如,对于问题/项目“您的社区提供哪些心理健康服务?”,我创建了三个额外的列

'急诊科提供的服务', “诊所提供的服务”, 和“学校提供的服务”。

如果响应者在其开放式响应中支持这三个子类别中的任何一个,我会写一个“是”,如果不是,一个“否”。

所以我有五列,一列 id,一列包含原始开放式问题,以及三个子类别列,每个人编码为是或否。

df<-structure(list(id = 1:20, other_mh_services = c("school services and emergency room", 
"mental health clinic", "mental health clinic and schools services", 
"none", "mental health clinic", "school services and emergency room", 
"mental health clinic", "mental health clinic and schools services", 
"none", "mental health clinic", "school services and emergency room", 
"mental health clinic", "mental health clinic and schools services", 
"none", "mental health clinic", "school services and emergency room", 
"mental health clinic", "mental health clinic and schools services", 
"none", "mental health clinic"), school = c("yes", "no", "yes", 
"no", "no", "yes", "no", "yes", "no", "no", "yes", "no", "yes", 
"no", "no", "yes", "no", "yes", "no", "no"), er = c("yes", "no", 
"no", "no", "no", "yes", "no", "no", "no", "no", "yes", "no", 
"no", "no", "no", "yes", "no", "no", "no", "no"), clinic = c("no", 
"yes", "yes", "no", "yes", "no", "yes", "yes", "no", "yes", "no", 
"yes", "yes", "no", "yes", "no", "yes", "yes", "no", "yes")), class = "data.frame", row.names = c(NA, 
-20L))

例如

ID Item1. Other mental health services? Item1. school Item1.ER Item1.clinic
1 school services and emergency room yes yes no
2 mental health clinic no no yes
3 mental health clinic and schools services yes no yes
4 none no no no

我想创建一个条形图或直方图,它在 x 轴上有每个项目子类别(第 3-5 列),在 y 轴上有回答“是”的人数。 Example Plot

关于如何在 ggplot2 中执行此操作的任何建议?

【问题讨论】:

  • 欢迎。请使用dput(data) 分享您的数据示例并将输出粘贴到原始问题中。谢谢。
  • 您应该提供您的数据,以便我们为您提供帮助。使用条形图可能比使用直方图更好。直方图更适合连续变量。具有 2-3 个水平的因子变量在直方图中表现不佳。您还应该提出特定的编程问题,以便在 SO 中成为主题。
  • 好的,谢谢,我添加了一些关于我的数据的信息,但我是新手,所以如果您对如何更好地显示我的数据有建议,请告诉我。是的,我认为条形图会很好。我正在寻找一些关于如何生成一个 ggplot 条形图的示例代码,该条形图包括我根据原始开放式问题编码的三个子类别变量中的每一个。谢谢!
  • 我编辑了我的帖子以进一步解释并提供可重复的数据

标签: r ggplot2


【解决方案1】:

如果没有适当的可重现数据集,我只能对您想要什么做出有根据的猜测。

我将这些数据组成了我们回答问题的两个可能答案(ER 或学校)

df<-data.frame(ID = seq(1:100), question = seq(1:100), School = sample(c(0,1), replace=TRUE, size=100),
               ER = sample(c(0,1), replace=TRUE, size=100))

我还创建了一个小型数据框,其中包含这些答案的所有可能组合(4 种答案类型)。然后我将它们标记为 A、B、C 或 D。我还添加了一个列,在其中我根据 1 或 0 指定每个答案(1 表示是,0 表示否)

possible_combinations<-unique(df[, c("School", "ER")])
possible_combinations$combo_type<-c("A", "B", "C", "D")
possible_combinations$combos<-paste(possible_combinations$School,possible_combinations$ER)

我想用标记填充原始数据集,根据上面的可能组合指示哪些问题有哪些答案组合,因此我在原始数据集中创建一个空列:

df$combo<-NA

现在我只需运行一个 for 循环,检查实际答案与先前建立的组合的组合,并用 A、B、C 或 D 填充这个空列。

for(i in 1:nrow(df)){
  combo<-paste(df$School[i], df$ER[i])
  df$combo[i]<-possible_combinations$combo_type[which(possible_combinations[,4] %in% combo)]
}

现在只需在根据唯一组合汇总每个答案的总计数后,使用 ggplot 绘制条形图即可:

df %>% group_by(combo) %>%
  summarise(total = n()) %>% ggplot(.) +
  geom_bar(stat = "identity", aes(x = combo, y = total), width =0.5) +
  theme_bw()

【讨论】:

  • 非常感谢,我最终可能会按照您的建议进行绘制。非常有帮助。我编辑了我的原始帖子...希望这次您可以重现数据,并且您可以看到我要创建的绘图类型。
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 2019-02-15
  • 2011-10-05
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多