Fill.contour vs. ggplot2 + stat_contour

I am new to ggplot2 and I am trying to replicate a graph that I created using filled.contour with ggplot2.

below is my code:

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

I can’t figure out how to get the ggplot contour to fill the polygons all the way to the upper left side (there is a point in (0.10) with z = 0.99) ... all I get is these strange triangles

+8
r ggplot2
source share
1 answer

To create the ggplot version of the ggplot graph, in your example you will need a larger data.frame object than the df object, and with geom_tile you get the plot you are looking for. Consider the following:

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

enter image description here

+3
source share

All Articles