具有组特定频率的多组直方图

Multi-group histogram with group-specific frequencies

首先,我已经阅读了以下主题:ggplot2 - Multi-group histogram with in-group proportions rather than frequency

我遵循了 ddply 的建议,但它似乎对我的数据不起作用。从逻辑上讲,代码应该在我的数据集上完美运行,但我不知道我做错了什么。

总体:我想制作一个直方图(我正在学习 ggplot)来显示我的每个研究组中的基因型频率。

像这样:

这是一个模仿我自己的模拟数据集:

df<-data.frame(ID=1:60,
               Genotypes=sample(c("CG", "CC", "GG"), 60, replace=T),
               Study_Group=sample(c("Control", "Pathology1", "pathology2"), 60, replace=T))

我试过 p + geom_bar(aes(aes(y = ..count../sum(..count..)) 的变体,但是 r returns "cannot find 'count' object" 或类似的效果。

我也试过:

df.new<-ddply(df,.(Study_Group),summarise,
              prop=prop.table(table(df$Genotype)),
              Genotype=names(table(df$Genotype)))`

而且我认为汇总函数有错误,但老实说,我不知道自己在做什么。

问题仅仅是我对解决方案的理解,还是我的数据集中存在本质上的差异?

感谢您的帮助。

试一试。在这里,我使用的是 dplyr,它是一个包,其中包含来自 plyrddply 类型函数的更新版本。一件事,我不确定你是想让你的 x 轴成为 Study_Groups 还是你的 Genotypes。你的问题表明你想要每个组中 Genotype 的频率,但你的图表在 x 上有 Genotypes。解决方案遵循既定的愿望,而不是情节。但是,进行更改以在 x 上获得 Genotype 很简单。我会在代码注释中注明要更改的位置和内容。

library(dplyr)
library(ggplot2)

df2 <- df %>%
  count(Study_Group, Genotypes) %>%
  group_by(Study_Group) %>% #change to `group_by(Genotypes) %>%` for alternative approach
  mutate(prop = n / sum(n))

ggplot(data = df2, aes(Study_Group, prop, fill = Genotypes)) + 
  geom_bar(stat = "identity", position = "dodge")