-
Notifications
You must be signed in to change notification settings - Fork 1
/
ModularOneVarPlot.R
70 lines (48 loc) · 1.74 KB
/
ModularOneVarPlot.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
## require() for required libraries for module
require(ggplot2)
require(plotly)
# MODULE UI
OneVarPlotUI <- function(id) {
ns <- NS(id)
## Ui Outputs Here from server below
## for mutliple Output use fillCol/fillRow(), or flowLayout() wrapped around Outputes
fillCol(
div(
selectInput(ns("plot_type"), "Select Plot Type", choices = c("Histogram", "Density", "Dot Plot", "Bar")),
checkboxInput(ns("group_check"), "Include Comparison Group"),
uiOutput(ns("group_var")),
selectInput(ns("xvar"), "Select Variable", choices = NULL),
actionButton(ns("update_chart"), "Update"),
plotlyOutput(ns("plot_out"))
))
}
# MODULE Server
OneVarPlotServer <- function(input, output, session, data) {
## Place server code here to be called by callModule
## place whatever inputs needed in function call
ns <- session$ns
observe({
updateSelectInput(session, "xvar", "Select Variable", choices = colnames(data()))
})
output$group_var <- renderUI({
if(input$group_check){
selectInput("group_var", "Select Comparison", choices = colnames(data()))
}
})
plot_data <- eventReactive(input$update_chart, {
p <- ggplot(data(), aes_string(x = input$xvar))
if(input$group_check){
p <- ggplot(data(), aes_string(x = input$xvar, group = input$group_var, fill = input$group_var))
}
p <- switch(input$plot_type,
`Histogram` = p + geom_histogram(),
`Density` = p + geom_density(),
`Dot Plot` = p + geom_dotplot(),
`Bar` = p + geom_bar())
})
## use reactive and observe elements
## render elements
output$plot_out <- renderPlotly({
ggplotly(plot_data())
})
}