(ggplot)在stat_density中,aes有时不映射默认数据集中的变量

时间:2013-11-18 04:25:36

标签: r ggplot2

试图了解ggplot映射的工作原理......

考虑具有两列的数据表dt:

group:  data grouping variable [a, b, … e]
values: the data [here, N(x,1) where x depends on group]

以下内容生成样本数据集。

library(data.table)
set.seed(333)
dt  <- data.table(group=rep(letters[1:5],each=20))
dt[,values:=rnorm(100,mean=as.numeric(factor(group)))]

以下为每个缩放为(0,1)的组生成密度图。

ggp <- ggplot(dt)      # establish dt as the default dataset
ggp + stat_density(aes(x=values, color=group, y=..scaled..), 
                   geom="line", position="identity")

以下生成的密度图的比例从(0,1)变为(-25,+ 25)。

ggp + stat_density(aes(x=values, color=group, y=-25+50*..scaled..), 
                   geom="line", position="identity")

但是以下生成和错误:

ggp + stat_density(aes(x=values, color=group, y=min(values)+diff(range(values))*..scaled..), 
                   geom="line", position="identity")
Error in eval(expr, envir, enclos) : object 'values' not found

我的问题是:为什么aes正确地将“值”映射到x =值中的dt,而不是y = ...?

注意:我尝试这样做的原因是将密度图放在散点图矩阵的对角面上。是的,我知道在ggplot中有大约5种不同的生成散点图矩阵的方法。

提前感谢任何可以提供帮助的人。

1 个答案:

答案 0 :(得分:3)

似乎stat_density()只能使用xy的值进行计算。因此,如果您需要values变量范围内的比例数据,那么您可以编写x而不是values,因为values已经映射到x

ggplot(dt)+stat_density(aes(x=values, color=group, y=min(x)+diff(range(x))*..scaled..), 
                        geom="line", position="identity")

enter image description here