R ggplot2几何图形栏:绘制两个变量的总和,并按每个变量的比例分组

R ggplot2几何图形栏:绘制两个变量的总和,并按每个变量的比例分组,r,ggplot2,R,Ggplot2,我无法找到以下问题的答案/解决方案: 我有两个数值变量。我取两者之和,并希望用条形图表示该和变量的相对频率+指示其子成分的比例(即一个变量作为和的一部分的平均比例) 示例:我有v1=问题数量,v2=答案数量。每个观察可以有x个问题和y个答案以及x+y交互 示例代码: df <- data.frame(matrix(ncol = 2, nrow = 5)) x <- c("questions", "answers") colnames(df) <- x df$questions

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

我有两个数值变量。我取两者之和,并希望用条形图表示该和变量的相对频率+指示其子成分的比例(即一个变量作为和的一部分的平均比例)

示例:我有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")
df
#示例数据
df=数据框架(问题=c(1,2,3,1,2),
答案=c(2,3,4,2,3))
df$interactionsum%
分组依据(交互作用)%>%
汇总所有(总和)%>%
聚集(x,y,-相互作用)
分组依据(交互作用)%>%
突变(y=y/和(y))%>%
ggplot(aes(交互作用总和,y,填充=x))+
几何图形栏(stat=“identity”)
#示例数据
df=数据框架(问题=c(1,2,3,1,2),
答案=c(2,3,4,2,3))
df$interactionsum%
分组依据(交互作用)%>%
汇总所有(总和)%>%
聚集(x,y,-相互作用)
分组依据(交互作用)%>%
突变(y=y/和(y))%>%
ggplot(aes(交互作用总和,y,填充=x))+
几何图形栏(stat=“identity”)

df
df但每个变量的比例在一个总和内可能会有所不同。你想要平均比例吗?是的,我知道,是的!:-)最好是为每个平均比例设置一个误差条,但不是必要的。你想如何在条形图中绘制x轴上的相互作用总和和y轴上的相对频率?你提到了“第一条误差条的三分之一”。你预计有多少酒吧?如果你想要“平均比例”,它应该只有一个小节。@franziskalypse他将总和视为一个因子。但是每个变量的比例在一个总和内可以变化。你想要平均比例吗?是的,我知道,是的!:-)最好是为每个平均比例设置一个误差条,但不是必要的。你想如何在条形图中绘制x轴上的相互作用总和和y轴上的相对频率?你提到了“第一条误差条的三分之一”。你预计有多少酒吧?如果你想要“平均比例”,它应该只有一个小节。@franziskalypse他将总和视为一个因子。现在显示的是相对频率而不是病例数。现在显示的是相对频率而不是病例数。
# 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")
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

require(dplyr) 
require(tidyr)
require(ggplot2) 
df<-df  %>% group_by(interactionsum) %>% 
  summarize(questions=mean(questions)/mean(interactionsum) ,answers=mean(answers)/mean(interactionsum) , n=n()/nrow(df) ) %>% mutate(interactionsum=as.factor(interactionsum)) %>% 
  gather("key","means",questions, answers) 
ggplot(df,aes(x=interactionsum,y=means*n,fill=key))+geom_bar(stat="identity")