Plotting a function is often helpful to better understand what’s going on. Plotting curves in R base
is simple by virtue of function curve
. But how to draw curves using ggplot2?
That’s a little bit more complicated by can still be accomplished by 1-2 lines.
library(ggplot2)
Normal curve
p <- ggplot(data = data.frame(x = c(-3, 3)), aes(x))
p + stat_function(fun = dnorm, n = 101)
stat_function
is some kind of parallel function to curve
. The parameter n
tells ggplot how finely granulated the curve should be. Compare to n=10
:
p + stat_function(fun = dnorm, n = 10)
Logistic curve
The logitistic curve plays an eniment role in many statistical methods, e.g., regression for binary events, and Rasch model in psychometric. It is sometimes called “s-type” curve (or “ogive”) due to its form vaguely resembling an “S”:
scurve <- function(x){
y <- exp(x) / (1 + exp(x))
return(y)
}
p + stat_function(fun = scurve, n = 100)
As our function does not have a prebottled version in base R, we have defined a function beforehand. That function is then passed over to ggplot2.
Alternatively, we could have done that in one step:
p + stat_function(fun = function(x) exp(x)/(1+exp(x)), n = 100)
Which is shorter but somewhat less readable.
Ln-Function
Now the principle is clear and we can readily apply it to whatever function we wish. Let’s take the natural logarithm (log
in R) as a final example.
p + stat_function(fun = log, n = 100)
## Warning in .Primitive("log")(x_trans): NaNs produced
## Warning: Removed 50 rows containing missing values (geom_path).
Note that the ln-function is not defined for negative values (zero gives -Inf).