NGLVieweR can be used to visualize and interact with Protein Data Bank (PDB) and structural files in R and Shiny applications. It includes a set of API functions to manipulate the viewer after creation in Shiny.
NGLVieweR(data, format = NULL, width = NULL, height = NULL, elementId = NULL)A PDB entry code (e.g. "7CID"), the path to a structure
file, or the file contents as a single string or a vector of lines (e.g.
from readLines()). Files compressed with gzip, bzip2 or xz
(.gz, .bz2, .xz) are decompressed.
Input format (cif, mmcif, mcif, pdb, ent, pqr, gro, sdf, sd,
mol2), with or without a leading dot. Needed for file contents and for
files without a recognisable extension. Binary formats such as MMTF are
not supported. For a PDB entry code, "pdb" or "cif" picks
the file downloaded from RCSB; without format the PDB-format file
is used, and the mmCIF file if there is none (large entries such as
ribosomes only exist as mmCIF). For such entries, format = "cif"
saves the failed request for the PDB-format file.
Must be a valid CSS unit (like '100%',
'400px', 'auto') or a number, which will be coerced to a
string and have 'px' appended.
optional element Id
A NGLVieweR htmlwidgets object.
The package is based on the NGL.js JavaScript library. To see the full set of features please read the official manual of NGL.js.
NGLVieweR_proxy() for handling of API calls after rendering.
NGLVieweR_example() See example "API" and "basic".
# Example 1: Most Basic
NGLVieweR("7CID") %>%
addRepresentation("cartoon",
param = list(name = "cartoon", colorScheme="residueindex"))
# Example 2: Advanced
NGLVieweR("7CID") %>%
stageParameters(backgroundColor = "white") %>%
setQuality("high") %>%
setSpin(FALSE) %>%
addRepresentation("cartoon",
param = list(
name = "cartoon",
colorScheme = "residueindex"
)
) %>%
addRepresentation("ball+stick",
param = list(
name = "ball+stick",
colorValue = "red",
colorScheme = "element",
sele = "200"
)
) %>%
addRepresentation("label",
param = list(
name = "label", sele = "200:A.O",
showBackground = TRUE,
backgroundColor = "black",
backgroundMargin = 2,
backgroundOpacity = 0.5,
showBorder = TRUE,
colorValue = "white"
)
) %>%
addRepresentation("surface",
param = list(
name = "surface",
colorValue = "white",
opacity = 0.1
)
) %>%
zoomMove("200", "200", 2000, -20)
#---------------------Using Shiny-------------------------
# App 1: Basic Example
if (interactive()) {
library(shiny)
ui <- fluidPage(NGLVieweROutput("structure"))
server <- function(input, output) {
output$structure <- renderNGLVieweR({
NGLVieweR("7CID") %>%
addRepresentation("cartoon",
param = list(
name = "cartoon",
colorScheme = "residueindex"
)
) %>%
addRepresentation("ball+stick",
param = list(
name = "ball+stick",
sele = "1-20",
colorScheme = "element"
)
) %>%
stageParameters(backgroundColor = "black") %>%
setQuality("high") %>%
setFocus(0) %>%
setSpin(TRUE)
})
}
shinyApp(ui, server)
}
# App 2: Example with API calls
if (interactive()) {
library(shiny)
ui <- fluidPage(
titlePanel("Viewer with API inputs"),
sidebarLayout(
sidebarPanel(
textInput("selection", "Selection", "1-20"),
selectInput("type", "Type", c("ball+stick", "cartoon", "backbone")),
selectInput("color", "Color", c("orange", "grey", "white")),
actionButton("add", "Add"),
actionButton("remove", "Remove")
),
mainPanel(
NGLVieweROutput("structure")
)
)
)
server <- function(input, output) {
output$structure <- renderNGLVieweR({
NGLVieweR("7CID") %>%
addRepresentation("cartoon",
param = list(name = "cartoon", colorScheme = "residueindex")
) %>%
stageParameters(backgroundColor = "black") %>%
setQuality("high") %>%
setFocus(0) %>%
setSpin(TRUE)
})
observeEvent(input$add, {
NGLVieweR_proxy("structure") %>%
addSelection(isolate(input$type),
param =
list(
name = "sel1",
sele = isolate(input$selection),
colorValue = isolate(input$color)
)
)
})
observeEvent(input$remove, {
NGLVieweR_proxy("structure") %>%
removeSelection("sel1")
})
}
shinyApp(ui, server)
}