1 min read

Plotting functions in 3d

Load packages

library(tidyverse)
library(mosaic)
library(plotly)

Gimme a function

Say, you have some function such as

\[ f(x) = x^2+z^2 \]

In more R-ish:

f <- makeFun(x^2 + z^2 ~ x & z)

And you would like to plot it.

Observe that this function has two input (independent) variables, \(x\) and \(z\), plus one output (dependent) variables, \(y\).

The thing is, you’ll need to define the values for a number of output values for \(y\), as defined by the function.

Define a grid

First, we define a grid for the input variables.

x <- y <- seq(-5, 5, length = 20)

Compute the function value for each combination of the input variables

Then we compute the \(y\) value for each combination of \(x\) and \(y\), this can be achieved using outer(). That function applies some function on each combination of \(x\) and \(y\), and that’s just what we would like to achieve.

z <- outer(x,y, FUN = f)

Plot in Base R

Now, let’s plot:

persp(x, y, z)

Plot using Plotly

plot_ly(x = x, y = y, z = z, type = "surface")

Bonus: Contour plot in plotly

plot_ly(x = x, y = y, z = z, type = "contour")