我有一系列数据表明某种类型的DNA元素在基因组中活跃了多久。它可能看起来像这样:
data.df <- data.frame(name=c("type1", "type1", "type1", "type2", "type2", "type2"),
active=c(9,11,10,21,21,18))
因此,大约10年前有三个'type1'元素活跃,20年前有三个类型2元素活跃。
我使用ggplot2创建了一个堆积密度图,以获得每个元素何时处于活动状态的分布,如下所示:
ggplot(data.df, aes(x=active)) + geom_density(position="stack", aes(fill=name))
我有关于这些元素的相对丰度的信息,我想将每个元素密度的高度乘以该数字。这最终会给我这些元素在基因组中的实际丰富活动,而不仅仅是它们活动的分布。
所以我的问题可以归结为:我如何根据组来转换/乘以每个元素类型密度的高度?例如,如果我在基因组中有1000个第一类元素而只有3个第2类元素,那么堆积密度图将由类型1控制,并且您几乎看不到与类型2相关的曲线。
我希望这是有道理的。提前谢谢!
答案 0 :(得分:3)
我不确定我是否正确理解了您的问题,但这是您想要的吗?
ggplot(data.df)
+geom_density(aes(x=active,y=..scaled..,fill=name),position="stack")
ggplot2
下{p> stat_density
的帮助说scaled
给出了“密度估算值,最大值为1”。
或者,您也可以向wght
添加权重列(例如data.frame
),使用weight
中的geom_density
参数并忽略警告消息
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的权重。