首先,我已经阅读了以下帖子: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返回&#34;找不到&#39; count&#39;对象&#34;或类似的东西。
我也尝试过:
df.new<-ddply(df,.(Study_Group),summarise,
prop=prop.table(table(df$Genotype)),
Genotype=names(table(df$Genotype)))`
我相信总结功能有误,但说实话,我不知道我在做什么。
问题只是我对解决方案的理解,还是我的数据集本身就有什么不同?
感谢您的帮助。
答案 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")