【问题标题】:grouped bar chat with age range within each group每组内的年龄范围分组条形图
【发布时间】:2021-08-04 06:02:43
【问题描述】:

我在类似于以下示例的表格中列出了人员及其组和年龄。我想根据年龄范围绘制一个分组条形图。

  Group Age
1  G1    29
2  G2    25
3  G3    55
4  G2    33
5  G1    70
6  G3    80

我尝试了给定here 的以下语法,但不知道如何将图分成三组和每组内的年龄范围

df<- mutate(df, age_class = cut(Age, breaks = seq(20, 80, by = 10)))  
ggplot(df) + geom_bar(aes(x = age_class, fill = Group), position = "dodge") + scale_fill_manual(values = c("red", "blue", "green"))

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    假设您想要一个条形图来计算每个组在每个年龄范围内出现的次数(如果不是,请纠正我,但这是您尝试过的),您可以执行以下操作:

    library(tidyverse)
    # Reproducing your data
    df1 <- tibble(
      Group = c("G1", "G2", "G3", "G1", "G2", "G3"),
      Age = c(29, 25, 55, 33, 70, 80)
    )
    

    您当前尝试的一个问题是您试图将cut 指向名为weight 的列,但您的数据中不存在这样的列。要解决此问题,您可以正确参考您的专栏Age,如下所示:

    df1 <- df1 %>% mutate(Age_class = cut(Age, breaks = seq(20, 80, by = 10))) 
    

    然后,像这样绘制:

    ggplot(df1, aes(x = Age_class, fill = Group)) + 
      geom_bar(position = "dodge") + 
      scale_fill_manual(values = c("red", "blue", "green"))
    

    这给出了每个组中每个年龄范围的计数 - 在您的可重现示例中所有计数均为 1,因此输出图如下所示:

    【讨论】:

    • 谢谢!!我只是想知道如果我希望我的 x 轴具有三个单独的组,即 G1、G2 和 G3,并且在每个组内,有范围(即 20-30、30-40 rtc),需要进行哪些更改。你画的。
    • 我想我现在明白了。这对我有用ggplot(df1, aes(x = Group, fill = age_class)) + geom_bar(position = "dodge") + scale_fill_manual(values = c("red", "blue", "green", "orange", "yellow"))
    • @BeginneR 太好了,这就是我的建议 - 不用担心!
    • 非常感谢!!我只是在尝试每个组中每个范围的百分比(而不是计数)。有什么解决办法吗?
    • @BeginneR 您可能必须使用mutate 计算每个Age_class 中“组”出现的比例,然后将其绘制在图表的y 轴上。也许您可以发布一个新问题来询问这个问题,以便答案更加明显?我很乐意试一试。
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多