我无法比较多种密度,并且需要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()