TITLE: Plotting a semi-variogram fit in ggplot2
DATE: 2019-07-12
AUTHOR: John L. Godlee
====================================================================


The default output of variogram() from the {gstat} package looks 
fine:

  ![Default 
semivariogram](https://johngodlee.xyz/img_full/variogram/variogram.p
ng)

But I wanted more control over how it looked for a manuscript I'm 
writing. I'm most familiar with {ggplot2} so wanted to use that.

First grab some data

    library(gstat)
    dat <- meuse

    df <- data.frame(x = dat$x, y = dat$y, copper = dat$copper)

Create a semivariogram and line fit:

    semivar <- variogram(copper~1, data = df, locations = ~x+y)

    semivar_fit <- fit.variogram(semivar,
      model = vgm(psill = 600, model = "Exp", range = 500, nugget = 
200))

    plot(semivar, semivar_fit)

The plot function produces the same plot as seen above.

Now to grab values from semivar and semivar_fit for ggplot2:

    semivar_fit_fort <- variogramLine(semivar_fit, maxdist = 
max(semivar$dist))

And then plot the relevant columns from semivar and 
semivar_fit_fort in ggplot():

    ggplot() +
      geom_point(data = semivar, aes(x = dist, y = gamma)) +
      geom_line(data = semivar_fit_fort, aes(x = dist, y = gamma)) +
      #ylim(0, 52) +
      theme_classic() +
      labs(x = "Distance (m)", y = "Semivariance (\u03B3)")

  ![ggplot2 
semivariogram](https://johngodlee.xyz/img_full/variogram/ggplot.png)