首页 > 解决方案 > R(ggplot2)中的密度图,按变量着色,返回与直方图和频率图非常不同的分布?

问题描述

我已经在这里梳理了几个问题,但我似乎无法弄清楚我的密度图发生了什么。

我有一组放射性碳日期,这些日期归因于不同的文化。我需要通过时间显示日期的频率,但按文化区分日期。堆叠直方图可以完成这项工作(图 1),但通常不鼓励使用它们,所以这是不可能的,但我想要比频率图更平滑的东西(图 2)。

图 1:直方图

图 1. 直方图。

图 2:频率图

图 2. 频率图。

当我生成一个按培养物着色的密度图(图 3)时,y 轴上培养物的相对分布与它们的计数相比发生了巨大变化。例如,在密度图中,蓝色的密度曲线远高于紫色;然而,在直方图中,我们可以看到紫色组的日期要多得多。

图 3:密度图

图 3. 密度图。

我的代码有问题吗(见下文)?或者也许我需要以某种方式缩放密度曲线?还是我不了解密度图?(免责声明:我的统计知识相当薄弱)

提前致谢!

ggplot(test, aes(x=CalBP))+
theme_tufte(base_family="sans")+
theme(axis.line=element_line(), axis.text=element_text(color="black")) +
theme(legend.position="none") +
theme(text=element_text(size=14)) +
geom_density(aes(color=factor(Culture), fill=factor(Culture)), alpha = 0.5) +
scale_x_reverse() +
labs(x="Cal. B.P.") +
ylab(expression("Density")) +
coord_cartesian(xlim = c(4773, 225)) +
scale_fill_manual(values=c("#cf9045", "#ebe332", "#5f9388", "#6abeef", "#9d88d6")) +
scale_color_manual(values=c("#cf9045", "#ebe332", "#5f9388", "#6abeef", "#9d88d6")) 

标签: rggplot2density-plot

解决方案


不同之处在于对密度图进行了缩放,使得曲线下的总面积为 1。它的功能是对概率密度函数进行建模,该函数(根据定义)具有面积 1。

如果数据中的每个组都有相同数量的观察值,那么密度图和直方图之间的唯一区别就是 y 轴。当您有不同数量的观察值时,密度图会对此进行归一化(每个区域的总面积为 1),而对于具有更多观察值的组,直方图的条形要高得多。
在基础 R 中,您可以通过设置在直方图中修复此问题freq = FALSE,但我没有看到按比例放大到直方图的密度图 - 忽略相对样本大小的影响通常更有趣。


推荐阅读