有人可以帮我将下面的数据绘制为密度图,其中colour=variable
?
> head(combined_length.m)
length seq mir variable value
1 22 TGAGGTATTAGGTTGTATGGTT mmu-let-7c-5p Ago1 8.622468
2 23 TGAGGGAGTAGGTTGTATGGTTT mmu-let-7c-5p Ago1 22.212471
3 21 TGAGGTAGTAGGTTGCATGGT mmu-let-7c-5p Ago1 9.745199
4 22 TGAGGTAGTATGTTGTATGGTT mmu-let-7c-5p Ago1 11.635982
5 22 TGAGTTAGTAGGTTGTATGGTT mmu-let-7c-5p Ago1 13.203627
6 20 TGAGGTAGTAGGCTGTATGG mmu-let-7c-5p Ago1 7.752571
ggplot(combined_length.m, aes(factor(length),value)) + geom_bar(stat="identity") + facet_grid(~variable) +
theme_bw(base_size=16
我尝试了这个没有成功:
ggplot(combined_length.m, aes(factor(length),value)) + geom_density(aes(fill=variable), size=2)
Error in data.frame(counts = c(167, 9324, 177, 150451, 62640, 74557, 4, :
arguments imply differing number of rows: 212, 6, 1, 4
我想要这样的事情:
答案 0 :(得分:2)
将factor(length)
用于x
似乎会产生问题。只需使用length
即可。
此外,密度图显示您定义为x
的任何内容的分布。因此,根据定义,y
轴是给定值x
的密度。在您的代码中,您似乎试图同时指定x
和y
,这没有任何意义。您可以在y
中指定geom_density(...)
,但这会控制缩放比例,如下所示。 [注意:您的示例只有一种variable
(Ago1),所以我创建了一个人工数据集。
set.seed(1) # for reproducible example
df <- data.frame(variable=rep(LETTERS[1:3],c(5,10,15)),
length =rpois(30,25),
value =rnorm(30,mean=20,sd=5))
library(ggplot2)
ggplot(df,aes(x=length))+geom_density(aes(color=variable))
在此表示中,每条曲线下的区域为1.这与设置y=..density..
ggplot(df,aes(x=length))+geom_density(aes(color=variable,y=..density..))
您还可以设置y=..count..
根据计数进行缩放。在此示例中,由于C
有15个观察值,A
只有5个,蓝色曲线(C
)的面积是红色曲线的三倍(A
)。
ggplot(df,aes(x=length))+geom_density(aes(color=variable,y=..count..))
您还可以设置调整曲线的y=..scaled..
,使每个曲线的最大值对应1。
ggplot(df,aes(x=length))+geom_density(aes(color=variable,y=..scaled..))
最后,如果您想摆脱所有烦人的额外行,请改用stat_density(...)
:
ggplot(df,aes(x=length))+
stat_density(aes(color=variable),geom="line",position="identity")