【问题标题】:Missing a grouping variable when creating multiple barplots with ggplot2使用 ggplot2 创建多个条形图时缺少分组变量
【发布时间】:2020-05-24 19:43:22
【问题描述】:

我是Rggplot2 的新手,我正在努力思考如何创建多个相邻的条形图。

我有一个包含 5 个不同变量的数据集:

  • 变量1:“年龄”,数字
  • 变量2:“性别”,分类,级别:男性,女性,潜水员
  • 变量 3:“抑郁症”,分类,级别:无、疑似、轻度、中度、重度
  • 变量 4:“FearSymptoms”,分类,级别:无、怀疑、轻度、中度、重度
  • 变量 5:“SomaticSymptoms”,分类,级别:无、疑似、轻度、中度、重度

所有变量都在一个数据框中,我已将 3 个症状变量设置为因子变量。

我能够为按性别编码的单个症状变量创建条形图,例如:

ggplot(myData, aes(x = DepriSymptoms, fill = Gender)) + 
  geom_bar() +
  theme_bw() +
  labs(y = "Participant Count",
       x = "Symptoms",
       title = "Depression Symptom Severity by Gender")

DepriSymptoms 的示例条形图:

是否可以在 ggplot2 中使用 facetgroup 来创建 3 个单独的条形图,就像我制作的那样(一个用于抑郁症,一个用于一个用于 FearSymptoms,一个用于 SomaticSymptoms)?

在我看来,我缺少一个可供分组依据的变量。

【问题讨论】:

  • 这是可能的——您需要使用类似tidyr::pivot_longer 的方式将数据转换为长格式。如果您发布一些数据,我们可以向您展示如何操作
  • 查看minimal reproducible example 以获得有关创建可重现问题的一些指导。最简单的做法是使用dput(myData) 将您的数据粘贴到问题中,或者如果您的数据很大,则使用您的数据样本。
  • @Greg 你(和@shirewoman2)是对的,这正是我所需要的。 :) shirewoman2 创建的数据框几乎就是我的数据框,所以我不再在这里发布。

标签: r ggplot2 bar-chart


【解决方案1】:

如果你想创建一个分面的 ggplot2 图表,你需要在你的 data.frame 中有一个变量,你可以通过它来分面或分解数据。让我们根据您的问题从一些示例数据开始:

CategoryLevels <- c("none", "suspected", "light", "medium", "severe")

myData <- data.frame(SubjectID = LETTERS[1:10], 
                     Gender = sample(c("M", "F", "divers"), 10, replace = TRUE),
                     DepressionSymptoms = 
                           factor(sample(CategoryLevels, 10, replace = TRUE), 
                                  levels = CategoryLevels),
                     FearSymptoms = 
                           factor(sample(CategoryLevels, 10, replace = TRUE), 
                                  levels = CategoryLevels),
                     SomaticSymptoms =
                           factor(sample(CategoryLevels, 10, replace = TRUE), 
                                  levels = CategoryLevels))

我猜你的数据结构看起来像这样。正如@Greg 所说,您需要将数据从宽格式(每列是一个症状)转换为更长的格式(一列列出症状,另一列列出受试者的反应)。为此,您需要一个主题 ID 来链接所有内容,以确保您知道谁的答案是谁的。

myData <- myData %>% 
      pivot_longer(names_to = "Symptom", values_to = "Response", 
                   cols = matches("Symptom"))

现在您已经获得了长格式的数据,您可以在“症状”列中分面并按受试者的性别填充条形颜色。

ggplot(myData, aes(x = Response, fill = Gender)) +
      geom_bar(stat = "count") +
      facet_wrap(~ Symptom)

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多