转换堆积密度图(ggplot2)中每个因素的高度

3

我有一系列数据,显示某种类型的DNA元素在基因组中活跃的时间。它可能看起来像这样:

data.df <- data.frame(name=c("type1", "type1", "type1", "type2", "type2", "type2"),
                      active=c(9,11,10,21,21,18))

大约10年前有三个“type1”元素活跃,20年前有三个type2元素活跃。

我使用ggplot2创建了一个堆叠密度图,以获取每个元素活跃时间的分布情况,类似于以下内容:

ggplot(data.df, aes(x=active)) + geom_density(position="stack", aes(fill=name))

堆叠样本图

我有这些元素相对丰度的信息,想要将每个元素密度的高度乘以该数值。这将给我提供这些元素在基因组中的实际活性丰度,而不仅是它们的活动分布。

所以我的问题归结为:如何根据组别转换/乘以每个元素类型密度的高度?例如,如果我有1000个类型一元素和只有3个类型二元素在基因组中,堆叠密度图将被类型1主导,你几乎看不到与类型2相关的曲线。

希望这讲得清楚。谢谢!

1个回答

3
我不确定我是否正确理解了你的问题,但这是你想要的吗?
ggplot(data.df)
+geom_density(aes(x=active,y=..scaled..,fill=name),position="stack")

ggplot2stat_density帮助文档中指出,scaled参数可以生成“最大值为1的密度估计图”。

或者,您也可以在您的data.frame中添加一个权重列(例如wght),在geom_density中使用weight参数,并忽略警告信息。

data.df=data.frame(name=c("type1","type1","type1","type1","type1","type1","type2", "type2","type2"),active=c(1.1,1,1,1,1,1,17.1,17,17),stringsAsFactors =FALSE)
data.df=within(data.df,wght<-c(rep(1/6,6),rep(4/9,3)))

ggplot(data.df)+
geom_density(aes(x=active,y=(..density..),fill=name,weight=wght),position="stack")

然而,我不确定geom_density如何处理权重不等于1的情况。


这些权重正是我所需要的。..scaled.. 将所有曲线缩放到最大高度为1,这使得更宽的分布/活动范围在数量上被人为地夸大了。谢谢! - David M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接