我找不到以下问题的答案/解决方案:
我有两个数字变量。我将两者的总和取整,并想用条形图表示该求和变量的相对频率+表示其子成分的比例(即,将一个变量的平均比例作为总和的一部分)。
示例:我有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实现这种分组?
提前谢谢!
答案 0 :(得分:1)
# 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")
答案 1 :(得分:1)
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")
对于每个可能的交互和,我们创建其所有问题变量的均值和其所有答案变量的均值。然后,我们收集(使用tidyr
)以使长数据格式受到ggplot的青睐,然后使用“ identity”统计量将这些均值绘制在堆叠的条形图中,因为它们已经反映了值的频率。>
我也将交互作用总和转化为一个因素,以改善最终结果的外观。