2014-09-11 24 views
8

Ben ggplot2 için yeni ve ggplot2 ile filled.contour kullanarak oluşturduğum bir grafiği çoğaltmaya çalışıyorum. Aşağıda filled.contour vs. ggplot2 + stat_contour

benim kodudur:

require(ggplot2) 
require(reshape2) 

#data prep 
scale <- 10 

xs <- scale * c(0, 0.5, 0.8, 0.9, 0.95, 0.99, 1) 
ys <- scale * c(0, 0.01, 0.05, 0.1, 0.2, 0.5, 1) 

df <- data.frame(expand.grid(xs,ys)) 
colnames(df) <- c('x','y') 
df$z <- ((scale-df$x) * df$y)/((scale-df$x) * df$y + 1) 

#filled contour looks good 
filled.contour(xs, ys, acast(df, x~y, value.var='z')) 

#ggplot contour looks bad 
p <- ggplot(df, aes(x=x, y=y, z=z)) 

p + stat_contour(geom='polygon', aes(fill=..level..)) 

Ben sol üst tarafına kadar poligonlar tüm yol doldurmak için ggplot kontur almak anlamaya olamaz (0,10 (bir nokta var z = 0.99) ... Ben olsun tüm bu garip üçgen vardır ile)

cevap

3

Eğer örnekte df nesneden daha data.frame büyük olması gerekir filled.contour arsa bir ggplot sürümünü oluşturmak ve geom_tile kullanarak üretecek aradığınız arsa. Aşağıdaki düşünün:

# a larger data set 
scl <- 10 
dat <- expand.grid(x = scl * seq(0, 1, by = 0.01), 
        y = scl * seq(0, 1, by = 0.01)) 
dat$z <- ((scl - dat$x) * dat$y)/((scl - dat$x) * dat$y + 1) 

# create the plot, the geom_contour may not be needed, but I find it helpful 
ggplot(dat) + 
aes(x = x, y = y, z = z, fill = z) + 
geom_tile() + 
geom_contour(color = "white", alpha = 0.5) + 
scale_fill_gradient(low = "lightblue", high = "magenta") + 
theme_bw()