在rstudio的叠加密度图中校正和统一峰

问题描述 投票:0回答:1

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

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

enter image description here

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

我如何在Rstudio中做到这一点?

r ggplot2 kernel-density density-plot
1个回答
0
投票
这是一种小技巧,可能有一种更干净的方法。我将在这里使用虹膜数据集。

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
© www.soinside.com 2019 - 2024. All rights reserved.