This vignette contains part I of a set of examples on how to use
clugenr
in 3D. Examples require the following setup
code:
library(clugenr) # The clugenr library
options(rgl.useNULL = TRUE) # Create RGL plots in systems without displays (CI)
library(rgl)
setupKnitr(autoprint = TRUE) # Render RGL plots directly on generated page
# Load helper functions for plotting examples
source("plot_examples_3d.R", local = knitr::knit_global())
# Keep examples reproducible in newer R versions
RNGversion("3.6.0")
The 3D examples were plotted with the plot_examples_3d()
function available here.
direction
parameter<- 123 seed
<- clugen(3, 4, 500, c(1, 0, 0), 0, c(10, 10, 10), 15, 1.5, 0.5, seed = seed)
e040 <- clugen(3, 4, 500, c(1, 1, 1), 0, c(10, 10, 10), 15, 1.5, 0.5, seed = seed)
e041 <- clugen(3, 4, 500, c(0, 0, 1), 0, c(10, 10, 10), 15, 1.5, 0.5, seed = seed) e042
plot_examples_3d(list(e = e040, t = "e040: direction = [1, 0, 0]"),
list(e = e041, t = "e041: direction = [1, 1, 1]"),
list(e = e042, t = "e042: direction = [0, 0, 1]"))
angle_disp
parameter and using a custom
angle_deltas_fn
function<- 123 seed
# Custom angle_deltas function: arbitrarily rotate some clusters by 90 degrees
<- function(nclu, astd) sample(c(0, pi / 2), nclu, replace = TRUE) angdel_90
<- clugen(3, 6, 1000, c(1, 0, 0), 0, c(10, 10, 10), 15, 1.5, 0.5, seed = seed)
e043 <- clugen(3, 6, 1000, c(1, 0, 0), pi / 8, c(10, 10, 10), 15, 1.5, 0.5, seed = seed)
e044 <- clugen(3, 6, 1000, c(1, 0, 0), 0, c(10, 10, 10), 15, 1.5, 0.5, seed = seed,
e045 angle_deltas_fn = angdel_90)
plot_examples_3d(list(e = e043, t = "e043: angle_disp = 0"),
list(e = e044, t = "e044: angle_disp = π / 8"),
list(e = e045, t = "e045: custom angle_deltas function"))
direction
for each cluster and
changing angle_disp
<- 123 seed
# Define a main direction for each cluster
<- matrix(c(1, 1, 1,
dirs 0, 0, 1,
1, 0, 0,
0, 1, 0,
-1, 1, 1),
nrow = 5, byrow = TRUE)
<- clugen(3, 5, 1000, dirs, 0, rep.int(0, 3), 20, 0, 0.25, seed = seed)
e046 <- clugen(3, 5, 1000, dirs, pi / 12, rep.int(0, 3), 20, 0, 0.25, seed = seed)
e047 <- clugen(3, 5, 1000, dirs, pi / 4, rep.int(0, 3), 20, 0, 0.25, seed = seed) e048
plot_examples_3d(list(e = e046, t = "e046: angle_disp = 0"),
list(e = e047, t = "e047: angle_disp = π / 12"),
list(e = e048, t = "e048: angle_disp = π / 4"))
<- 123 seed
llength
parameter<- clugen(3, 5, 800, c(1, 0, 0), pi / 10, c(10, 10, 10), 0, 0, 0.5,
e049 seed = seed, point_dist_fn = "n")
<- clugen(3, 5, 800, c(1, 0, 0), pi / 10, c(10, 10, 10), 10, 0, 0.5,
e050 seed = seed, point_dist_fn = "n")
<- clugen(3, 5, 800, c(1, 0, 0), pi / 10, c(10, 10, 10), 30, 0, 0.5,
e051 seed = seed, point_dist_fn = "n")
plot_examples_3d(list(e = e049, t = "e049: llength = 0"),
list(e = e050, t = "e050: llength = 10"),
list(e = e051, t = "e051: llength = 30"))
llength_disp
parameter and using a custom
llengths_fn
function# Custom llengths function: line lengths tend to grow for each new cluster
<- function(nclu, llen, llenstd) {
llen_grow * (0:(nclu - 1) + rnorm(nclu, sd = llenstd))
llen }
<- clugen(3, 5, 800, c(1, 0, 0), pi / 10, c(10, 10, 10), 15, 0.0, 0.5,
e052 seed = seed, point_dist_fn = "n")
<- clugen(3, 5, 800, c(1, 0, 0), pi / 10, c(10, 10, 10), 15, 10.0, 0.5,
e053 seed = seed, point_dist_fn = "n")
<- clugen(3, 5, 800, c(1, 0, 0), pi / 10, c(10, 10, 10), 10, 0.1, 0.5,
e054 seed = seed, point_dist_fn = "n", llengths_fn = llen_grow)
plot_examples_3d(list(e = e052, t = "e052: llength_disp = 0.0"),
list(e = e053, t = "e053: llength_disp = 10.0"),
list(e = e054, t = "e054: custom llengths function"))
cluster_sep
parameter<- 321 seed
<- clugen(3, 8, 1000, c(1, 1, 1), pi / 4, c(30, 10, 10), 25, 4, 3, seed = seed)
e055 <- clugen(3, 8, 1000, c(1, 1, 1), pi / 4, c(10, 30, 10), 25, 4, 3, seed = seed)
e056 <- clugen(3, 8, 1000, c(1, 1, 1), pi / 4, c(10, 10, 30), 25, 4, 3, seed = seed) e057
plot_examples_3d(list(e = e055, t = "e055: cluster_sep = [30, 10, 10]"),
list(e = e056, t = "e056: cluster_sep = [10, 30, 10]"),
list(e = e057, t = "e057: cluster_sep = [10, 10, 30]"))