当覆盖相同长度但不同尺度的特征数据的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)
谢谢!
答案 0 :(得分: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