在心理学中,通常会用覆盖正常曲线显示直方图。用geom_line显示观察值的密度将有利于与正常曲线进行比较,所以我编写了另一个直方图函数来执行此操作(userfriendlyscience
包中的powerHist
)。然而,对于大型矢量(目前与1670万个数据点一起工作),它执行速度非常缓慢,所以我试图让它更快。我曾经使用density
来手动计算密度估计值,然后将它们与一个箱中的最大数据点数相乘以缩放它以匹配直方图。如何使用相关数据框内部或外部的变量在ggplot中实时转换美学?
但是,这是非常缓慢,加上,我想ggplot2应该能够做到这一点。由stat_density
计算的变量之一是..scaled..
,这是密度估计缩放到1的最大值。现在我只需要乘以这个。但ggplot2不会找到我使用的变量。将它与常量相乘可以正常工作,但是否将变量放在我传递给ggplot2的数据帧中似乎没有关系:ggplot2找不到它。
scalingFactor <- max(table(cut(mtcars$mpg, breaks=20)));
dat <- data.frame(mpg = mtcars$mpg,
scalingFactor = scalingFactor);
ggplot(mtcars, aes(x=mpg)) +
geom_histogram(bins=20) +
geom_line(aes(y=..scaled.. * scalingFactor),
stat='density', color='red');
这产生了:只用scalingFactor
自身时
ggplot(mtcars, aes(x=mpg)) +
geom_histogram(bins=20) +
geom_line(aes(y=..scaled.. * 10),
stat='density', color='red');
而且,:
Error in eval(expr, envir, enclos) : object 'scalingFactor' not found
当用常规数字替换scalingFactor
,它的工作原理,它也可以工作:
ggplot(mtcars, aes(x=mpg)) +
geom_histogram(bins=20) +
geom_line(aes(y=scalingFactor),
stat='density', color='red');
所以scalingFactor
似乎可用;乘法是可用的;并且显然..scaled..
可用。不过,将它们结合起来似乎失败了。我在这里错过了什么?我无法找到任何有关'通过stat生成的变量或其他东西计算'的内容。 。 。
有没有人碰到过这个?它是否知道我刚刚错过的ggplot2行为?