【问题标题】:Stacked and grouped chart ggplot2 combined for all entries堆叠和分组图表 ggplot2 结合所有条目
【发布时间】:2020-12-21 23:21:23
【问题描述】:

我也有类似的问题:Combine Stacked and Grouped chart ggplot2

我的数据如下所示:

我要创建的是ggplot 中的genom_bar 图表,如下所示:

蓝色区域代表age_groupgender 部分。我的代码如下所示:

  p <- ggplot(data, aes(x=`Green cars are nice`, y=round(percentage, digits = 2), fill = Age_group)) +
    geom_bar(stat = "identity", position=position_dodge()) +
    facet_grid(.~residence) +
    xlab(filename) +
    ylab(NULL) +
    theme_bw() +
    theme(axis.text.x = element_text(size = 12, angle = 45, vjust = 1, hjust=1)) +
    theme(
      axis.title.x = element_text(size = 14),
      axis.text.x = element_text(size = 14),
      axis.title.y = element_text(size = 14),
      axis.text.y = element_text(size = 14)) +
    guides(fill=guide_legend(title=NULL))
    
  
  p

我需要添加什么才能使条形图看起来像我的绘画图片?我无法理解我发布的 SO 示例中显示的代码。

编辑:

Berlin  18-39   Woman   Agree   1.689550205 0.009283243
Berlin  18-39   Woman   Disagree    3.942283812 0.0216609
Berlin  18-39   Woman   Don't know  0.563183402 0.003094414
Berlin  40-70   Woman   Agree   1.689550205 0.009283243
Berlin  40-70   Woman   Disagree    3.942283812 0.0216609
Berlin  40-70   Woman   Don't know  0.563183402 0.003094414
London  18-39   Woman   Agree   1.689550205 0.009283243
London  18-39   Woman   Disagree    3.942283812 0.0216609
London  18-39   Woman   Don't know  0.563183402 0.003094414
London  40-70   Woman   Agree   1.689550205 0.009283243
London  40-70   Woman   Disagree    3.942283812 0.0216609
London  40-70   Woman   Don't know  0.563183402 0.003094414
Berlin  18-39   Man Agree   1.689550205 0.009283243
Berlin  18-39   Man Disagree    3.942283812 0.0216609
Berlin  18-39   Man Don't know  0.563183402 0.003094414
Berlin  40-70   Man Agree   1.689550205 0.009283243
Berlin  40-70   Man Disagree    3.942283812 0.0216609
Berlin  40-70   Man Don't know  0.563183402 0.003094414
London  18-39   Man Agree   1.689550205 0.009283243
London  18-39   Man Disagree    3.942283812 0.0216609
London  18-39   Man Don't know  0.563183402 0.003094414
London  40-70   Man Agree   1.689550205 0.009283243
London  40-70   Man Disagree    3.942283812 0.0216609
London  40-70   Man Don't know  0.563183402 0.003094414

【问题讨论】:

  • 您可以将您的表格发布为代码而不是图像吗?帮助你会更容易。
  • 完成。值不同 - 但这并不重要。
  • 这里的维度已经用完了。您可以有任何 2 个堆叠、闪避和刻面,但不是全部 3 个。您的选择是在 x 轴上进行交互,因此绘图将如您所愿,除非您需要在单个面板中使用分隔图的线,或者(更容易)将两个面创建为单独的图并使用cowplotpatchwork 将它们缝合在一起
  • @KGB91 实际上,显示数据的正确方法是使用dput(YOUR_DF),以便我们可以无缝复制/粘贴:)
  • 谢谢,我不知道dput - 我一直想知道你是如何在这里输出这些漂亮的数据的......

标签: r ggplot2


【解决方案1】:

ggplot 的设计对您应该尝试嵌入绘图的变量数量非常固执己见。因此,按照您的要求,这是不可行的。

需要考虑的一些事情,它们都不是您所要求的,它们都不一定是好的可视化。

这是您的数据(我更改了名称,因此您需要将它们调整为本地设置中的名称)。此外,“不知道”被编为“不知道”。

df <- read.delim(text=
                   "residence   age sex agree   persons percent
Berlin  18-39   Woman   Agree   1.689550205 0.009283243
Berlin  18-39   Woman   Disagree    3.942283812 0.0216609
Berlin  18-39   Woman   Don't   0.563183402 0.003094414
Berlin  40-70   Woman   Agree   1.689550205 0.009283243
Berlin  40-70   Woman   Disagree    3.942283812 0.0216609
Berlin  40-70   Woman   Don't   0.563183402 0.003094414
London  18-39   Woman   Agree   1.689550205 0.009283243
London  18-39   Woman   Disagree    3.942283812 0.0216609
London  18-39   Woman   Don't   0.563183402 0.003094414
London  40-70   Woman   Agree   1.689550205 0.009283243
London  40-70   Woman   Disagree    3.942283812 0.0216609
London  40-70   Woman   Don't   0.563183402 0.003094414
Berlin  18-39   Man Agree   1.689550205 0.009283243
Berlin  18-39   Man Disagree    3.942283812 0.0216609
Berlin  18-39   Man Don't   0.563183402 0.003094414
Berlin  40-70   Man Agree   1.689550205 0.009283243
Berlin  40-70   Man Disagree    3.942283812 0.0216609
Berlin  40-70   Man Don't   0.563183402 0.003094414
London  18-39   Man Agree   1.689550205 0.009283243
London  18-39   Man Disagree    3.942283812 0.0216609
London  18-39   Man Don't   0.563183402 0.003094414
London  40-70   Man Agree   1.689550205 0.009283243
London  40-70   Man Disagree    3.942283812 0.0216609
London  40-70   Man Don't   0.563183402 0.003094414
")

可以尝试使用颜色来编码。情节相当糟糕,我敢打赌,你可能会找到不那么恶心的colorsfills 的组合。我不会把它推荐给我最大的敌人,而是做我的客人。

ggplot(df,
       aes(x=agree,
           y=round(percent, digits = 2),
           fill = age,
           color=sex)) +
  scale_fill_manual(values=c("gray50", "white"))+
  scale_color_manual(values=c("red", "black"))+
  geom_bar(stat = "identity",
           position=position_dodge(width = 1)) +
  facet_grid(.~residence)

另一个选项是创建交互变量。但是你不能躲闪和堆叠。

ggplot(df,
       aes(x=agree,
           y=round(percent, digits = 2),
           fill = interaction(sex, age))) +
  scale_fill_manual(values=c("gray50", "lightblue", "black", "blue"))+
  geom_bar(stat = "identity", color="white") +
  facet_grid(.~residence)

最后,考虑使用facet_wrap()。这可以让您随心所欲地堆叠,但您不会并排进行年龄比较

ggplot(df,
       aes(x=agree,
           y=round(percent, digits = 2),
           fill = interaction(sex, age))) +
  scale_fill_manual(values=c("gray50", "lightblue", "black", "blue"))+
  geom_bar(stat = "identity", color="white") +
  facet_grid(age~residence)
  

值得注意的是,将百分比四舍五入到 2 位会使其消失(该值四舍五入为 0.0)。不确定您上传的图像是否实际上是四舍五入的,或者数据是否有额外的零。这是最后一个没有round(...)的情节@

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2019-01-18
    • 2017-10-21
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多