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)