2014-09-11 12 views
8

Tôi mới dùng ggplot2 và tôi đang cố gắng sao chép biểu đồ mà tôi đã tạo bằng cách sử dụng filled.contour với ggplot2.filled.contour vs. ggplot2 + stat_contour

dưới đây là mã của tôi:

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..)) 

tôi không thể tìm ra cách để có được đường viền ggplot để lấp đầy đa giác tất cả các con đường lên về phía bên tay trái phía trên (có một điểm mà tại (0,10) với z = 0,99) ... tất cả tôi nhận được là những hình tam giác lạ

Trả lời

3

để tạo một phiên bản ggplot của cốt truyện filled.contour bạn sẽ cần phải có một data.frame lớn hơn so với đối tượng df trong ví dụ của bạn và sử dụng geom_tile sẽ sản xuất cốt truyện bạn đang tìm kiếm. Hãy xem xét những điều sau đây:

# 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()