试图了解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种不同的生成散点图矩阵的方法。
提前感谢任何可以提供帮助的人。
答案 0 :(得分:3)
似乎stat_density()
只能使用x
和y
的值进行计算。因此,如果您需要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")