提问人:aleoconn 提问时间:11/2/2023 最后编辑:M--aleoconn 更新时间:11/2/2023 访问量:54
对不同量级的 x 值进行归一化geom_density
Normalize geom_density for x-values of different magnitudes
问:
我有一个由两个不同测量值组成的数据集,它们在不同样本(a 和 b)中测量的值(我们称之为高度和宽度)的幅度非常不同。我想使用平滑直方图来说明这两个测量值的可变性,无论它们的绝对大小如何,所以我一直在使用 。但是,使用计算的密度值同样彼此相差几个数量级。geom_density
geom_density
数据集:
library(tidyverse)
set.seed(123)
sample_a = tibble(sample = "a",
height = rnorm(20, mean = 0.1, sd = 0.01),
width = rnorm(20, mean = 50, sd = 10)) %>%
pivot_longer(c(height, width), names_to = "parameter", values_to = "result")
set.seed(321)
sample_b = tibble(sample = "b",
height = rnorm(20, mean = 0.2, sd = 0.03),
width = rnorm(20, mean = 55, sd = 10)) %>%
pivot_longer(c(height, width), names_to = "parameter", values_to = "result")
data = bind_rows(sample_a, sample_b)
当我绘制直方图时,当样本计数绘制在 y 轴上时,我能够比较每个样本中每个感兴趣参数的大小和变异性:
data %>%
ggplot()+
geom_histogram(aes(x = result))+
facet_grid(sample~parameter, scales = "free_x")
但是,当我使用(甚至包含 ,如本答案中建议的那样:将 R ggplot 中的直方图中的 y 轴归一化为比例)时,幅度大不相同:geom_density
y = after_stat(count)
data %>%
ggplot()+
geom_density(aes(x = result, y = stat(count)))+
facet_grid(sample~parameter, scales = "free_x")
如何使用平滑直方图在分面图中显示这些不同幅度的结果?
答:
1赞
M--
11/2/2023
#1
我们可以使用:after_stat(scaled)
ggplot(data, aes(x = result)) +
geom_density(aes(y = after_stat(scaled))) +
facet_grid(sample~parameter, scales = "free_x")
为了更好地说明,我在同一张图上显示了直方图和密度图:
ggplot(data, aes(x = result)) +
geom_histogram(aes(y = after_stat(count)), colour = "black", fill = NA) +
geom_density(aes(y = after_stat(scaled))) +
facet_grid(sample~parameter, scales = "free_x")
或者更好的是,用于归一化计数并将直方图与密度图相匹配:after_stat(ncount)
ggplot(data, aes(x = result)) +
geom_histogram(aes(y = after_stat(ncount)), colour = "black", fill = NA) +
geom_density(aes(y = after_stat(scaled))) +
facet_grid(sample~parameter, scales = "free_x")
创建于 2023-11-01 使用 reprex v2.0.2
评论