从 rstudio 校正和统一覆盖密度图中的峰值
Correcting and unifying peaks in overlay density plot from rstudio
我在比较多个密度时遇到问题,需要 R 大师的帮助。
我正在比较从 7 个不同时间段(30、45、60、90、120、180 和 240 分钟)收集的时间戳数据的密度。
我使用 ggplot2 绘制了一个覆盖 KDE 图。
下一步我要做的是将每个峰的y坐标匹配为1,并相应地调整其余的密度点。
所以基本上我会将每个 KDE 函数乘以一个常数,使每个峰值都等于 1(然后通过绘制 'matched peak KDE graph' 来可视化调整后的数据)。
我如何在 Rstudio 中执行此操作?
这有点老套,可能有更简洁的方法。我将在这里使用 iris 数据集。
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()
我在比较多个密度时遇到问题,需要 R 大师的帮助。
我正在比较从 7 个不同时间段(30、45、60、90、120、180 和 240 分钟)收集的时间戳数据的密度。 我使用 ggplot2 绘制了一个覆盖 KDE 图。
下一步我要做的是将每个峰的y坐标匹配为1,并相应地调整其余的密度点。 所以基本上我会将每个 KDE 函数乘以一个常数,使每个峰值都等于 1(然后通过绘制 'matched peak KDE graph' 来可视化调整后的数据)。
我如何在 Rstudio 中执行此操作?
这有点老套,可能有更简洁的方法。我将在这里使用 iris 数据集。
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()