r - 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 实现这种类型的分组?
先感谢您!
解决方案
# 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")
推荐阅读
- html - 如何使用相同的 css 表锁定多个页面的页脚高度
- python - 从第一帧到第二帧的按钮有效,但从第二帧到第三帧的按钮不起作用
- java - 将当前时间(dt)从秒转换为实时格式(小时和分钟)
- batch-file - 请求文件夹位置
- python - 使用 Pandas 或 Python 逐行合并两个文件
- html - Liquid 模板 - 无法修改 Jekyll Carousel 脚本
- python - Django runserver 正在运行,但网站未在 8080 以外的其他端口上加载:CPANEL
- apache-spark - 如何在 Google Cloud Platform 上提交 Spark Graphx 作业示例?
- pdf - imageMagick:如何在 pdf 的一页上绘图但保留整个 pdf?
- c# - 仅将单独程序集中的一些控制器注入 REST