library(rgl)
library(devout)
library(devoutrgl)
library(ggrgl)
library(ggplot2)
library(dplyr)
library(string2path)
set.seed(1)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Model Parameters
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
N <- 20
zoffset <- 10
theta_inc <- 10
helix_r <- 1
theta <- seq_len(N) * theta_inc * pi/180
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Create model
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dna <- data.frame(
x1 = helix_r * cos(theta),
y1 = helix_r * sin(theta),
x2 = helix_r * cos(theta + pi),
y2 = helix_r * sin(theta + pi),
z = seq_len(N) * zoffset,
base = sample(c('A', 'T', 'C', 'G'), size = N, replace = TRUE)
)
dna$cbase <- c(A='T', T='A', C='G', G='C')[dna$base]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Create plot with `geom_voxel_3d()`
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p <- ggplot(dna) +
geom_sphere_3d(aes(x1, y1, z = z, colour = base), size = 15) +
geom_sphere_3d(aes(x2, y2, z = z, colour = cbase), size = 15) +
geom_segment_3d(aes(x = x1, y = y1, z = z, xend = x2, yend = y2, zend = z), alpha = 0.25) +
coord_equal() +
theme_ggrgl() +
labs(
title = "Simple DNA Model",
subtitle = "ggrgl::geom_sphere_3d() + geom_segment_3d() with {devoutrgl}"
) +
scale_color_brewer(palette = 'Dark2')
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# plot in 3d with devoutrgl
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
devoutrgl::rgldev(fov = 30, view_angle = -40, zscale = 5)
p
invisible(dev.off())
Use your mouse, mouse buttons and scrollwheel to manipulate the 3d plot