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

时间:2016-12-08 01:33:46

标签: r ggplot2 histogram frequency

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

我遵循了ddply建议,它似乎不适用于我的数据。逻辑上代码应该完全适用于我的数据集,我不知道我做错了什么。

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

这样的事情:

enter image description here

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

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返回&#34;找不到&#39; count&#39;对象&#34;或类似的东西。

我也尝试过:

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

我相信总结功能有误,但说实话,我不知道我在做什么。

问题只是我对解决方案的理解,还是我的数据集本身就有什么不同?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

试一试。在此,我使用dplyr这是一个包含ddply类型函数的更新版本的包plyr。有一件事,我不确定你的x轴是Study_Group还是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")

enter image description here