所以我有两个数据框,一个是另一个的严格子集(它是这个数据框和另一个数据框之间的交集)。数据框是变量和相关计数的列表。
我遇到的问题是,即使与绘制完全相同数据的直方图相比,生成的密度图对数据也没有意义
ggplot()+
geom_histogram(data = vdjtoolTableTwo, aes(x = log10(frequency), y = after_stat(density), weight = count), fill=rgb(0,0,1,1/4)) +
geom_density(data = vdjtoolTableTwo, aes(x = log10(frequency), y = after_stat(density), weight = count), fill="black", alpha = 0.25)+
geom_histogram(data = tableOfGraphData, aes(x = log10(frequency.y), y = after_stat(density), weight = count.y), fill=rgb(1,0,0,1/4)) +
geom_density(data = tableOfGraphData, aes(x = log10(frequency.y), y = after_stat(density), weight = count.y), fill = "red", alpha = 0.25)+
coord_cartesian(xlim = scale)
其中 tableOfGraphData 是 vdjTableTwo 的严格子集
结果如下
你可以在直方图中清楚地看到,蓝色的表格(vdjtoolTableTwo)略微向下移动,低频值的浓度相对较高,而较红的直方图 tableOfGraphData 略微向更高的值移动,
令我困惑的是为什么密度图的相对形状与直方图不对应。感觉红色曲线应该在上半部分的所有点都高于黑色曲线,但事实并非如此。
在密度图中添加“调整 = 1/5”只会进一步加剧问题
我敢肯定,密度图的工作原理很简单,但我一辈子都弄不明白。任何关于从哪里开始寻找的建议都将不胜感激
解决了!
对于那些有类似问题的人,两条密度曲线之间的数据集差异导致内核具有不同的标准偏差(据我所知)。将带宽设置为一个设定值而不是 SD 的一个因子,可以在所有值中得到一致的结果
我的数据看起来像这样
graphX <- ggplot()+
geom_density(data = onlyOne, aes(x = log10(frequency), weight = count), bw = 0.2, fill="black", alpha = 0.5)+
geom_density(data = tableOfGraphData, aes(x = log10(frequency.x), weight = count.x), bw = 0.2, fill = "red", alpha = 0.5)+
coord_cartesian(xlim = scale)+
theme_light()
给出这个结果