r - 每组加权geom_density总和为1的密度

标签 r ggplot2 density-plot

在使用加权数据时,如何对密度图进行分组并使每组的密度总和为 1?

ggplot2geom_density() 的帮助建议使用加权数据的 hack:除以权重之和。但是当分组时,这意味着组的组合密度总计为 1。我希望每个组的密度总和为一个。

我发现了两种笨拙的方法来做到这一点。第一种是将每个组视为一个单独的数据集:

library(ggplot2)
library(ggplot2movies) # load the movies dataset

m <- ggplot()
m + geom_density(data = movies[movies$Action == 0, ], aes(rating, weight = votes/sum(votes)), fill=NA, colour="black") +
    geom_density(data = movies[movies$Action == 1, ], aes(rating, weight = votes/sum(votes)), fill=NA, colour="blue")

明显的缺点是手动处理因素水平和美学。我还尝试使用 data.table 包的窗口功能为每个 Action 组的总票数创建一个新列,除以它:

movies.dt <- data.table(movies)
setkey(movies.dt, Action)
movies.dt[, votes.per.group := sum(votes), Action]
m <- ggplot(movies.dt, aes(x=rating, weight=votes/votes.per.group, group = Action, colour = Action))
m + geom_density(fill=NA)

有没有更简洁的方法来做到这一点?由于我的表的大小,为了使用频率,我宁愿不按权重复制行。

最佳答案

使用dplyr

library(dplyr)
library(ggplot2)
library(ggplot2movies)

movies %>% 
  group_by(Action) %>% 
  mutate(votes.grp = sum(votes)) %>% 
  ggplot(aes(x=rating, weight=votes/votes.grp, group = Action, colour = Action)) +
  geom_density()

graph output by the code

关于r - 每组加权geom_density总和为1的密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20342494/

相关文章:

r - 计算R中两条密度曲线的交点

r - 通过ggplot在密度图中添加部分数据

r - 将函数应用于向量中的每个元素组合

r - 在 ggplot 上创建带有比例的条形图

r - 在 R 中全局打开和关闭调试消息?

r - R中的二维彩色图

使用效果编码重新调整因子和 glm

r - 图中每组不同的 alpha 值

r - 如果 ggplot2 箱线图中存在多个异常值,则出现抖动

r - 在密度图中寻找边界