This vignette contains a number of examples on how to use
clugenr
in 2D. Examples require the following setup
code:
# Load the clugenr library
library(clugenr)
# Load functions for plotting examples
source("plot_examples_2d.R", local = knitr::knit_global())
# Keep examples reproducible in newer R versions
RNGversion("3.6.0")
The 2D examples were plotted with the plot_examples_2d()
function available here.
direction
parameter<- 123 seed
<- clugen(2, 4, 200, c(1, 0), 0, c(10, 10), 10, 1.5, 0.5, seed = seed)
e001 <- clugen(2, 4, 200, c(1, 1), 0, c(10, 10), 10, 1.5, 0.5, seed = seed)
e002 <- clugen(2, 4, 200, c(0, 1), 0, c(10, 10), 10, 1.5, 0.5, seed = seed) e003
plot_examples_2d(list(e = e001, t = "e001: direction = [1, 0]"),
list(e = e002, t = "e002: direction = [1, 1]"),
list(e = e003, t = "e003: direction = [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_fn
<- clugen(2, 6, 500, c(1, 0), 0, c(10, 10), 10, 1.5, 0.5, seed = seed)
e004 <- clugen(2, 6, 500, c(1, 0), pi / 8, c(10, 10), 10, 1.5, 0.5, seed = seed)
e005 <- clugen(2, 6, 500, c(1, 0), 0, c(10, 10), 10, 1.5, 0.5, seed = seed,
e006 angle_deltas_fn = angdel_90_fn)
plot_examples_2d(list(e = e004, t = "e004: angle_disp = 0"),
list(e = e005, t = "e005: angle_disp = π/8"),
list(e = e006, t = "e006: custom angle_deltas function"))
llength
parameter<- 321 seed
<- clugen(2, 5, 800, c(1, 0), pi / 10, c(10, 10), 0, 0, 0.5, seed = seed,
e007 point_dist_fn = "n")
<- clugen(2, 5, 800, c(1, 0), pi / 10, c(10, 10), 10, 0, 0.5, seed = seed,
e008 point_dist_fn = "n")
<- clugen(2, 5, 800, c(1, 0), pi / 10, c(10, 10), 30, 0, 0.5, seed = seed,
e009 point_dist_fn = "n")
plot_examples_2d(list(e = e007, t = "e007: llength = 0"),
list(e = e008, t = "e008: llength = 10"),
list(e = e009, t = "e009: llength = 30"))
llength_disp
parameter and using a custom
llengths_fn
function<- 765 seed
# Custom llengths function: line lengths grow for each new cluster
<- function(nclu, llen, llenstd) {
llen_grow_fn * 0:(nclu - 1) + rnorm(nclu, sd = llenstd)
llen }
<- clugen(2, 5, 800, c(1, 0), pi / 10, c(10, 10), 15, 0.0, 0.5,
e010 seed = seed, point_dist_fn = "n")
<- clugen(2, 5, 800, c(1, 0), pi / 10, c(10, 10), 15, 10.0, 0.5,
e011 seed = seed, point_dist_fn = "n")
<- clugen(2, 5, 800, c(1, 0), pi / 10, c(10, 10), 10, 0.1, 0.5,
e012 seed = seed, llengths_fn = llen_grow_fn, point_dist_fn = "n")
plot_examples_2d(list(e = e010, t = "e010: llength_disp = 0.0"),
list(e = e011, t = "e011: llength_disp = 5.0"),
list(e = e012, t = "e012: custom llengths function"))
cluster_sep
parameter<- 222 seed
<- clugen(2, 8, 1000, c(1, 1), pi / 4, c(10, 10), 15, 2, 4, seed = seed)
e013 <- clugen(2, 8, 1000, c(1, 1), pi / 4, c(30, 10), 15, 2, 4, seed = seed)
e014 <- clugen(2, 8, 1000, c(1, 1), pi / 4, c(10, 30), 15, 2, 4, seed = seed) e015
plot_examples_2d(list(e = e013, t = "e013: cluster_sep = [10, 10]"),
list(e = e014, t = "e014: cluster_sep = [30, 10]"),
list(e = e015, t = "e015: cluster_sep = [10, 30]"))
cluster_offset
parameter and using a
custom clucenters_fn
function<- 222 seed
# Custom clucenters function: places clusters in a diagonal
<- function(nclu, csep, coff) {
centers_diag matrix(1, nrow = nclu, ncol = length(csep)) * (1:nclu * max(csep)) +
rep(coff, each = nclu)
}
<- clugen(2, 8, 1000, c(1, 1), pi / 4, c(10, 10), 10, 2, 2.5, seed = seed)
e016 <- clugen(2, 8, 1000, c(1, 1), pi / 4, c(10, 10), 10, 2, 2.5, seed = seed,
e017 cluster_offset = c(20, -20))
<- clugen(2, 8, 1000, c(1, 1), pi / 4, c(10, 10), 10, 2, 2.5, seed = seed,
e018 cluster_offset = c(-50, -50), clucenters_fn = centers_diag)
plot_examples_2d(list(e = e016, t = "e016: default"),
list(e = e017, t = "e017: cluster_offset = [20, -20]"),
list(e = e018, t = "e018: custom clucenters function"))
<- 234 seed
proj_dist_fn = "norm"
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 0.0, seed = seed)
e019 <- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 1.0, seed = seed)
e020 <- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 3.0, seed = seed) e021
plot_examples_2d(list(e = e019, t = "e019: lateral_disp = 0"),
list(e = e020, t = "e020: lateral_disp = 1"),
list(e = e021, t = "e021: lateral_disp = 3"))
proj_dist_fn = "unif"
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 0.0, seed = seed,
e022 proj_dist_fn = "unif")
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 1.0, seed = seed,
e023 proj_dist_fn = "unif")
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 3.0, seed = seed,
e024 proj_dist_fn = "unif")
plot_examples_2d(list(e = e022, t = "e022: lateral_disp = 0"),
list(e = e023, t = "e023: lateral_disp = 1"),
list(e = e024, t = "e024: lateral_disp = 3"))
# Custom proj_dist_fn: point projections placed using the Beta distribution
<- function(len, n) len * rbeta(n, 0.1, 0.1) - len / 2 proj_beta
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 0.0, seed = seed,
e025 proj_dist_fn = proj_beta)
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 1.0, seed = seed,
e026 proj_dist_fn = proj_beta)
<- clugen(2, 4, 1000, c(1, 0), pi / 2, c(20, 20), 13, 2, 3.0, seed = seed,
e027 proj_dist_fn = proj_beta)
plot_examples_2d(list(e = e025, t = "e025: lateral_disp = 0"),
list(e = e026, t = "e026: lateral_disp = 1"),
list(e = e027, t = "e027: lateral_disp = 3"))
<- 12321 seed
# Custom proj_dist_fn: point projections placed using the Beta distribution
<- function(len, n) len * rbeta(n, 0.1, 0.1) - len / 2 proj_beta
point_dist_fn = "n-1"
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed)
e028 <- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e029 proj_dist_fn = "unif")
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e030 proj_dist_fn = proj_beta)
plot_examples_2d(list(e = e028, t = "e028: proj_dist_fn = 'norm' (default)"),
list(e = e029, t = "e029: proj_dist_fn = 'unif'"),
list(e = e030, t = "e030: custom proj_dist_fn (Beta dist.)"))
point_dist_fn = "n"
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e031 point_dist_fn = "n")
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e032 point_dist_fn = "n", proj_dist_fn = "unif")
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e033 point_dist_fn = "n", proj_dist_fn = proj_beta)
plot_examples_2d(list(e = e031, t = "e031: proj_dist_fn = 'norm' (default)"),
list(e = e032, t = "e032: proj_dist_fn = 'unif'"),
list(e = e033, t = "e033: custom proj_dist_fn (Beta dist.)"))
# Custom point_dist_fn: final points placed using the Exponential distribution
<- function(projs, lat_std, len, clu_dir, clu_ctr) {
clupoints_n_1_exp <- function(npts, lstd) lstd * rexp(npts, rate = 2 / lstd)
dist_exp clupoints_n_1_template(projs, lat_std, clu_dir, dist_exp)
}
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e034 point_dist_fn = clupoints_n_1_exp)
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e035 point_dist_fn = clupoints_n_1_exp, proj_dist_fn = "unif")
<- clugen(2, 5, 1500, c(1, 0), pi / 4, c(20, 20), 14, 2, 2.0, seed = seed,
e036 point_dist_fn = clupoints_n_1_exp, proj_dist_fn = proj_beta)
plot_examples_2d(list(e = e034, t = "e034: proj_dist_fn = 'norm' (default)"),
list(e = e035, t = "e035: proj_dist_fn = 'unif'"),
list(e = e036, t = "e036: custom proj_dist_fn (Beta dist.)"))
<- 87 seed
# Custom clucenters_fn (all): yields fixed positions for the clusters
<- function(nclu, csep, coff) {
centers_fixed matrix(c(-csep[1], -csep[2], csep[1], -csep[2], -csep[1], csep[2], csep[1], csep[2]),
nrow = nclu, byrow = TRUE)
}
# Custom clusizes_fn (e038): cluster sizes determined via the uniform distribution,
# no correction for total points
<- function(nclu, npts, ae) sample(2 * npts / nclu, nclu, replace = TRUE)
clusizes_unif
# Custom clusizes_fn (e039): clusters all have the same size, no correction for
# total points
<- function(nclu, npts, ae) npts %/% nclu * rep.int(1, nclu) clusizes_equal
<- clugen(2, 4, 1500, c(1, 1), pi, c(20, 20), 0, 0, 5, seed = seed,
e037 clucenters_fn = centers_fixed, point_dist_fn = "n")
<- clugen(2, 4, 1500, c(1, 1), pi, c(20, 20), 0, 0, 5, seed = seed,
e038 clucenters_fn = centers_fixed, clusizes_fn = clusizes_unif,
point_dist_fn = "n")
<- clugen(2, 4, 1500, c(1, 1), pi, c(20, 20), 0, 0, 5, seed = seed,
e039 clucenters_fn = centers_fixed, clusizes_fn = clusizes_equal,
point_dist_fn = "n")
plot_examples_2d(list(e = e037, t = "e037: normal dist. (default)"),
list(e = e038, t = "e038: unif. dist. (custom)"),
list(e = e039, t = "e039: equal size (custom)"))