3

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

在此处输入图像描述

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)

谢谢!

4

1 回答 1

4

这是否符合您的期望?

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
于 2012-09-08T14:41:57.377 回答