..level.. in ggplot2 contour plot

2019-04-05 02:56发布

问题:

I find this variable a little confusing, for example, from the docs:

require(ggplot2)
require(reshape2)
volcano3d <- melt(volcano) 
names(volcano3d) <- c("x", "y", "z") 
v <- ggplot(volcano3d, aes(x, y, z = z)) 
v1 = v +  stat_contour(aes(colour=..level..,size=..level..)) 

Why can't I use this:

v2 = v +  stat_contour(aes(colour=as.factor(z),size=as.factor(z))) 

回答1:

From Hadley Wickham's A Layered Grammar of Graphics, page 21, the .. .. is used because the aesthetic (in this case, the levels of the contours) is not present in the original dataset, but instead is calculated by the contour statistic.

The two dots are a visual indicator highlighting that variable is not present in the original data, but has been computed by the statistic.

You can't use colour=as.factor(z) or size=as.factor(z) because the graphic doesn't use z, but instead uses a statistical transformation of it - namely, ..level..