gpt4 book ai didi

r - 标准化 ggplot 中覆盖密度图的 x 尺度

转载 作者:行者123 更新时间:2023-12-01 03:20:02 24 4
gpt4 key购买 nike

当覆盖具有相同长度但不同尺度数据的 ggplot 密度图时,是否可以对图的 x 尺度进行归一化以使密度匹配?或者有没有办法标准化密度 y 尺度?

enter image description here

library(ggplot2)

data <- data.frame(x = c('A','B','C','D','E'), y1 = rnorm(100, mean = 0, sd = 1),
y2 = rnorm(100, mean = 0, sd = 50))
p <- ggplot(data)

# Overlaying the density plots is a fail
p + geom_density(aes(x=y1), fill=NA) + geom_density(aes(x=y2), alpha=0.3,col=NA,fill='red')

# You can compress the xscale in the aes() argument:
y1max <- max(data$y1)
y2max <- max(data$y2)
p + geom_density(aes(x=y1), fill=NA) + geom_density(aes(x=y2*y1max/y2max), alpha=0.3,col=NA,fill='red')
# But it doesn't fix the density scale. Any solution?

# And will it work with facet_wrap?
p + geom_density(aes(x=y1), col=NA,fill='grey30') + facet_wrap(~ x, ncol=2)

谢谢!

最佳答案

这是否符合您的预期?

p + geom_density(aes(x=scale(y1)), fill=NA) + 
geom_density(aes(x=scale(y2)), alpha=0.3,col=NA,fill='red')

只有一个数据参数的 scale 函数会将经验分布集中在 0 上,然后将结果值除以样本标准差,这样结果的标准差就为 1。您可以更改位置的默认值和“压缩”或“扩展”的程度。您可能需要研究为 y1 和 y2 设置适当的 x_scales。这可能需要进行一些规模化的预处理。比例因子记录在返回对象的属性中。

 attr(scale(data$y2), "scaled:scale")
#[1] 53.21863

关于r - 标准化 ggplot 中覆盖密度图的 x 尺度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com