ggplot(chic, aes(x = date, y = temp)) +
geom_point(color = "gray40", alpha = .5) +
stat_smooth() +
labs(x = "Year", y = "Temperature (°F)")
`geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
It is amazingly easy to add smoothing to your data using {ggplot2}
.
You can simply use stat_smooth()
—not even a formula is required. This adds a LOESS (locally weighted scatter plot smoothing, method = "loess"
) if you have fewer than 1000 points or a GAM (generalized additive model, method = "gam"
) otherwise. Since we have more than 1000 points, the smoothing is based on a GAM:
ggplot(chic, aes(x = date, y = temp)) +
geom_point(color = "gray40", alpha = .5) +
stat_smooth() +
labs(x = "Year", y = "Temperature (°F)")
`geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
In most cases one wants the points to be on top of the ribbon so make sure you always call the smoothing before you add the points.
Though the default is a LOESS or GAM smoothing, it is also easy to add a standard linear fit:
ggplot(chic, aes(x = temp, y = dewpoint)) +
geom_point(color = "gray40", alpha = .5) +
stat_smooth(method = "lm", se = FALSE,
color = "firebrick", linewidth = 1.3) +
labs(x = "Temperature (°F)", y = "Dewpoint")
`geom_smooth()` using formula = 'y ~ x'
{ggplot2}
allows you to specify the model you want it to use. Maybe you want to use a polynomial regression?
ggplot(chic, aes(x = o3, y = temp)) +
geom_point(color = "gray40", alpha = .3) +
geom_smooth(
method = "lm",
formula = y ~ x + I(x^2) + I(x^3) + I(x^4) + I(x^5),
color = "black",
fill = "firebrick"
+
) labs(x = "Ozone Level", y = "Temperature (°F)")
geom
and stat
Huh, geom_smooth()
? There is an important difference between geom
and stat
but here it really doesn’t matter which one you use. Expand to compare both.
ggplot(chic, aes(x = o3, y = temp)) +
geom_point(color = "gray40", alpha = .3) +
geom_smooth(stat = "smooth") + ## the default
labs(x = "Ozone Level", y = "Temperature (°F)")
`geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
ggplot(chic, aes(x = o3, y = temp)) +
geom_point(color = "gray40", alpha = .3) +
stat_smooth(geom = "smooth") + ## the default
labs(x = "Ozone Level", y = "Temperature (°F)")
`geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
Or lets say you want to increase the GAM dimension (add some additional wiggles to the smooth):
<- c("darkorange2", "firebrick", "dodgerblue3")
cols
ggplot(chic, aes(x = date, y = temp)) +
geom_point(color = "gray40", alpha = .3) +
stat_smooth(aes(col = "1000"),
method = "gam",
formula = y ~ s(x, k = 1000),
se = FALSE, linewidth = 1.3) +
stat_smooth(aes(col = "100"),
method = "gam",
formula = y ~ s(x, k = 100),
se = FALSE, linewidth = 1) +
stat_smooth(aes(col = "10"),
method = "gam",
formula = y ~ s(x, k = 10),
se = FALSE, linewidth = .8) +
scale_color_manual(name = "k", values = cols) +
labs(x = "Year", y = "Temperature (°F)")