我无法比较多种密度,需要R大师的帮助。
我正在比较从7个不同时间段(30、45、60、90、120、180和240分钟)收集的时间戳数据的密度。 我使用ggplot2绘制了一个覆盖KDE图。我下一步要做的是将每个峰的y坐标匹配为1,并相应地调整其余的密度点。 因此,基本上,我将每个KDE函数乘以一个常数,该常数使每个峰等于1(然后通过绘制“匹配的峰KDE图”来可视化调整后的数据)。
如何在Rstudio中做到这一点?
这是一种小技巧,可能有一种更清洁的方法。我将在这里使用虹膜数据集。
library(ggplot2)
library(dplyr)
首先,建立典型的密度图:
p <- ggplot(iris,aes(x = Sepal.Length,colour = Species)) +
geom_density()
p
使用ggplot_build()
函数可以访问图的内部信息。
p_build <- ggplot_build(p)
在该列表中,有一个data
对象,该对象包含geom_density()
调用产生的映射坐标。我会抓住的。
p_mod <- p_build$data[[1]]
然后我进行调整。首先,我需要重新建立颜色所指的组,然后根据需要为每种颜色重新设置y值:
p_modded <- p_mod %>%
mutate(Species = case_when(colour == "#F8766D" ~ "setosa",colour == "#00BA38" ~ "versicolor",TRUE ~ "virginica")) %>%
group_by(colour) %>%
mutate(y = y / max(y)) %>%
ungroup()
现在是一个新图表。请注意,我不需要使用geom_density()
,因为已经计算出了密度,因此我只需要使用geom_line()
。
ggplot(p_modded,aes(x = x,y = y,colour = Species)) +
geom_line()