---
title: "Creating a plot from scratch"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Creating a plot from scratch}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

When setting up a plot to later add further elements to, generally your life will be made easier if you still use the `plot3js()` function to achieve basic plot setup but do not supply and x, y or z data to plot.

However it is of course possible to call the lower level functions that `plot3js()` uses but to call them directly as demonstrated in a simple example below.

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```{r setup}
library(r3js)
```

```{r, out.width="100%", out.height="400px"}
# Generate data
x <- runif(20, 0, 10)
y <- runif(20, 0, 20)
z <- runif(20, 0, 1)

# Initialise new plot
data3js <- plot3js.new()

# Set plot dimensions and aspect ratios
data3js <- plot3js.window(
  data3js,
  xlim = c(0,10),
  ylim = c(0,20),
  zlim = c(0,1),
  aspect = c(1, 1, 1)
)

# Add box
data3js <- box3js(data3js, col = "grey50")

# Add axes
data3js <- axis3js(data3js, side = "x")
data3js <- axis3js(data3js, side = "y")
data3js <- axis3js(data3js, side = "z")

# Add axes grids
data3js <- grid3js(data3js, col = "grey80")

# Plot points
data3js <- points3js(data3js, x, y, z, col = rainbow(20))

# Show the plot
r3js(data3js)
```
