使用ggplot制作多组密度图

4
使用 R 的 ggplot 来绘制多个密度图。
使用以下数据框:
set.seed(1234)
df <- data.frame(
  sex=factor(rep(c("F", "M"), each=5)),
  weight=round(c(rnorm(5, mean=0, sd=0),
                 rnorm(5, mean=2, sd=5)))
)

让我们先绘制仅包含女性群体的图表:

library(dplyr)
ggplot(df %>% filter(sex=="F"), aes(x=weight, color=sex)) + geom_density()

仅限女性密度图

enter image description here

但是,如果我们尝试绘制男性和女性的密度图:

ggplot(df, aes(x=weight, color=sex)) + geom_density()

女性和男性的密度图

enter image description here

我们得到了一个完全不同的女性密度图

我假设密度是按照人口计算的,所以添加另一种人口(在这种情况下是男性)不应该改变女性的密度。

1个回答

3
所有女性的体重都为0,因此在density()中的fromto都是0,这就是为什么会得到一条垂直线。当加入男性后,您将获得不同的fromto(现在是-10和7,即weight的范围),然后它将使用由nrd0算法确定的带宽进行密度估计。(请参见?bw.nrd0; 在本例中男性约为4,女性约为0.65)。平滑处理(默认情况下为高斯)创建了尖峰形状。
为了更好地理解正在发生的情况,请尝试一些其他参数的density()参数,例如:
ggplot(df, aes(x=weight, color=sex)) + geom_density(kernel = 'triangular', bw = 0.5)

triangular with longer bandwidth


我假设密度是按人口计算的。因此,添加不同的人口(在这种情况下是男性)不会改变女性的密度。 - Nir
组是分开的,但共享一些参数,如“from”和“to”,这些参数会随着添加组而更改。 - alistaire
我能否“强制”geom_density绘制上面的第一个图表,以显示女性数据? - Nir
你可以自己编写统计代码,但你可能不想这么做;在绘图之前分别计算密度更容易。 - alistaire

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