从Rstudio校正和统一叠加密度图中的峰

我无法比较多种密度,需要R大师的帮助。

我正在比较从7个不同时间段(30、45、60、90、120、180和240分钟)收集的时间戳数据的密度。 我使用ggplot2绘制了一个覆盖KDE图。

从Rstudio校正和统一叠加密度图中的峰

我下一步要做的是将每个峰的y坐标匹配为1,并相应地调整其余的密度点。 因此,基本上,我将每个KDE函数乘以一个常数,该常数使每个峰等于1(然后通过绘制“匹配的峰KDE图”来可视化调整后的数据)。

如何在Rstudio中做到这一点?

lhgfliuyang 回答:从Rstudio校正和统一叠加密度图中的峰

这是一种小技巧,可能有一种更清洁的方法。我将在这里使用虹膜数据集。

library(ggplot2)
library(dplyr)

首先,建立典型的密度图:

p <- ggplot(iris,aes(x = Sepal.Length,colour = Species)) + 
  geom_density()
p

enter image description here

使用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()

enter image description here

本文链接:https://www.f2er.com/2377567.html

大家都在问