首页 > 解决方案 > ggplot2 geom_bar:绘制两个变量的总和并按每个变量的比例分组

问题描述

我找不到以下问题的答案/解决方案:

我有两个数值变量。我取两者的总和,并希望绘制该总和变量的相对频率 + 表示其子分量的比例(即一个变量的平均比例作为总和的一部分)。

示例:我有 v1 = 问题数和 v2 = 答案数。每个观察可以有 x 个问题和 y 个答案以及 x+y 个交互。

示例代码:

df <- data.frame(matrix(ncol = 2, nrow = 5))
x <- c("questions", "answers")
colnames(df) <- x

df$questions <- c(1,2,3,1,2)
df$answers <- c(2,3,4,2,3)
df$interactionsum <- df$questions + df$answers


ggplot(df, aes(x = interactionsum)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) + 
  ylab("Relative frequencies") +
  xlab("Sum of interactions")

在这个数据设置中,第一个条的三分之一是问题(平均比例)和三分之二的答案(平均比例)。如何使用 ggplot2 实现这种类型的分组?

先感谢您!

标签: rggplot2

解决方案


# example data
df = data.frame(questions = c(1,2,3,1,2),
                answers = c(2,3,4,2,3))

df$interactionsum <- df$questions + df$answers

library(tidyverse)

df %>%
  group_by(interactionsum) %>%
  summarise_all(sum) %>%
  gather(x,y,-interactionsum) %>%
  group_by(interactionsum) %>%
  mutate(y = y/sum(y)) %>%
  ggplot(aes(interactionsum, y, fill=x))+
  geom_bar(stat="identity")

在此处输入图像描述


推荐阅读