shinycssloaders
https://github.com/daattali/shinycssloaders
https://daattali.com/shiny/shinycssloaders-demo/
설치 및 기본사용법
#devtools::install_github('andrewsali/shinycssloaders')
#options(spinner.color="#0dc5c1")
#options(spinner.size=my_size)
library(shinycssloaders)
#...
withSpinner(plotOutput("myPlot"))
plotOutput("myPlot") %>% withSpinner()
plotOutput("myPlot") %>% withSpinner(color="#0dc5c1")
#...
demo in shiny
library(tidyverse); library(data.table);library(shiny)
library(shinycssloaders)
ui <- fluidPage(
actionButton("go", "Go"),
plotOutput("myPlot") %>% withSpinner()
)
server <- function(input, output) {
output$myPlot <- renderPlot({
input$go
Sys.sleep(1.6)
data.table(x=1:10, y=runif(10)) %>% ggplot(aes(x,y)) + geom_point() + geom_line()
})
}
shinyApp(ui, server)
ui <- fluidPage(
actionButton("redraw_plot","Re-draw"),
checkboxInput("show_plot", "Show tables", value=TRUE),
fluidRow(
column(width=6,
plotOutput("myPlot") %>% withSpinner(type=7)
)
)
)
server <- function(input, output,session) {
output$myPlot <- renderPlot({
shiny::validate(need(input$show_plot,"Show table is unchecked. Check to see table."))
input$redraw_plot
Sys.sleep(1.6)
mtcars %>% ggplot(aes(x=hp, y=mpg))+ facet_grid(~gear)+ geom_point()
})
}
shinyApp(ui, server)
library(shiny)
library(shinycssloaders)
library(ggplot2)
ui <- fluidPage(
checkboxInput("show_plot", "Show tables", value=TRUE),
actionButton("redraw_plot","Re-draw"),
fluidRow(
column(width=6,
plotOutput("plotWithSpin") %>% withSpinner(type=7)
)
)
)
server <- function(input, output,session) {
output$plotWithSpin <- renderPlot({
shiny::validate(need(input$show_plot,"Show table is unchecked. Check to see table."))
input$redraw_plot
Sys.sleep(3) # just for animation
ggplot(mtcars, aes(x=hp, y=mpg))+ facet_grid(~gear)+ geom_point()
})
}
shinyApp(ui, server)
library(shiny); library(ggplot2); library(tidyverse)
library(shinycssloaders)
ui <- fluidPage(
actionButton("btn_plotting", "Plot"),
actionButton("btn_reset", "reset"),
plotOutput("mainPlot") %>% withSpinner(type=2, color="#428bca")
)
server <- function(input, output, session){
observeEvent(input$btn_plotting,{
Sys.sleep(3)
output$mainPlot <- renderPlot({
p <- ggplot(data.frame(val=rnorm(50)), aes(x=val)) + geom_histogram()
return(p)
})
})
observeEvent(input$btn_reset,{
Sys.sleep(3)
output$mainPlot <- renderPlot(p())
})
}
shinyApp(ui, server)
library(shiny); library(ggplot2)
data(iris)
ui <- basicPage(
plotOutput("plot1", brush="plot_brush"),
verbatimTextOutput("info"),
mainPanel(downloadButton('downloadData', 'Download'))
)
server <- function(input, output){
output$plot1 <- renderPlot({
ggplot(iris,aes(x=Sepal.Width,y=Sepal.Length)) +
geom_point(aes(color=factor(Species))) + theme_bw()
})
# output$info <- renderPrint({
# brushedPoints(iris, input$plot_brush, xvar="Sepal.Width", yvar="Sepal.Length")
# })
selectedData <- reactive({
brushedPoints(iris, input$plot_brush)
})
output$info <- renderPrint({
selectedData()
})
output$downloadData <- downloadHandler(
filename = function(){ paste('SelectedRows', '.csv', sep='') },
#content = function(file){ write.csv(output$info, file)}
content = function(file){ write.csv(selectedData(), file)}
selectedData
)
}
shinyApp(ui, server)
library(shiny)
library(shinycssloaders)
# for spinners 2-3 match the background color of wellPanel
options(spinner.color.background="#F5F5F5")
ui <- fluidPage(
wellPanel(
tags$b("This example shows the loading spinner whilst the plot is loading and hides the spinner when the plot is not shown."),br(),br(),
tags$ul(
tags$li("You can use it to wrap any kind of output."),
tags$li("To see what happens on recalculation, click the recalculate button"),
tags$li("To see what happens if no output should be generated, check off 'Show plots'.")
),
checkboxInput("show_plot","Show plot",value=TRUE),
actionButton("redraw_plot","Re-draw plots")
),
do.call(tabsetPanel,lapply(1:8,function(.type) {
tabPanel(paste0("Type ",.type),
fluidRow(
column(width=6,
wellPanel(
tags$b("With spinner:"),
plotOutput(paste0("plot",.type)) %>% withSpinner(type=.type)
)
),
column(width=6,
wellPanel(
tags$b("Without spinner (default):"),
plotOutput(paste0("nospin_plot",.type))
)
)
)
)
}))
)
server <- function(input, output,session){
for (i in 1:8) {
output[[paste0("nospin_plot",i)]] <- output[[paste0("plot",i)]] <- renderPlot({
validate(need(input$show_plot, "Show plot is unchecked. Check to see plot."))
input$redraw_plot
Sys.sleep(5) # just for demo so you can enjoy the animation
df <- data.frame(x = runif(1e4), y = runif(1e4)
ggplot(df, aes(x,y))+ geom_point
})
}
}
shinyApp(ui, server)
https://github.com/andrewsali/shinycssloaders
#devtools::install_github('andrewsali/shinycssloaders')
#options(spinner.color="#0dc5c1")
#options(spinner.size=my_size)
library(shinycssloaders)
...
withSpinner(plotOutput("my_plot"))
plotOutput("my_plot") %>% withSpinner()
plotOutput("my_plot") %>% withSpinner(color="#0dc5c1")
...
ex>
library(shiny)
library(shinycssloaders)
library(ggplot2)
options(spinner.color.background="#F5F5F5")
ui <- fluidPage(
checkboxInput("show_plot", "Show tables", value=TRUE),
actionButton("redraw_plot","Re-draw"),
fluidRow(
column(width=6,
plotOutput("plotWithSpin") %>% withSpinner(type=7)
)
)
)
server <- function(input, output,session) {
output$plotWithSpin <- renderPlot({
shiny::validate(need(input$show_plot,"Show table is unchecked. Check to see table."))
input$redraw_plot
Sys.sleep(3) # just for animation
ggplot(mtcars, aes(x=hp, y=mpg))+ facet_grid(~gear)+ geom_point()
})
}
shinyApp(ui, server)
library(shiny); library(ggplot2); library(tidyverse)
library(shinycssloaders)
ui <- fluidPage(
actionButton("btn_plotting", "Plot"),
actionButton("btn_reset", "reset"),
plotOutput("mainPlot") %>% withSpinner(type=2, color="#428bca")
)
server <- function(input, output, session){
observeEvent(input$btn_plotting,{
Sys.sleep(3)
output$mainPlot <- renderPlot({
p <- ggplot(data.frame(val=rnorm(50)), aes(x=val)) + geom_histogram()
return(p)
})
})
observeEvent(input$btn_reset,{
Sys.sleep(3)
output$mainPlot <- renderPlot(p())
})
}
shinyApp(ui, server)
library(shiny); library(ggplot2)
data(iris)
ui <- basicPage(
plotOutput("plot1", brush="plot_brush"),
verbatimTextOutput("info"),
mainPanel(downloadButton('downloadData', 'Download'))
)
server <- function(input, output){
output$plot1 <- renderPlot({
ggplot(iris,aes(x=Sepal.Width,y=Sepal.Length)) +
geom_point(aes(color=factor(Species))) + theme_bw()
})
# output$info <- renderPrint({
# brushedPoints(iris, input$plot_brush, xvar="Sepal.Width", yvar="Sepal.Length")
# })
selectedData <- reactive({
brushedPoints(iris, input$plot_brush)
})
output$info <- renderPrint({
selectedData()
})
output$downloadData <- downloadHandler(
filename = function(){ paste('SelectedRows', '.csv', sep='') },
#content = function(file){ write.csv(output$info, file)}
content = function(file){ write.csv(selectedData(), file)}
selectedData
)
}
shinyApp(ui, server)
library(shiny)
library(shinycssloaders)
# for spinners 2-3 match the background color of wellPanel
options(spinner.color.background="#F5F5F5")
ui <- fluidPage(
wellPanel(
tags$b("This example shows the loading spinner whilst the plot is loading and hides the spinner when the plot is not shown."),br(),br(),
tags$ul(
tags$li("You can use it to wrap any kind of output."),
tags$li("To see what happens on recalculation, click the recalculate button"),
tags$li("To see what happens if no output should be generated, check off 'Show plots'.")
),
checkboxInput("show_plot","Show plot",value=TRUE),
actionButton("redraw_plot","Re-draw plots")
),
do.call(tabsetPanel,lapply(1:8,function(.type) {
tabPanel(paste0("Type ",.type),
fluidRow(
column(width=6,
wellPanel(
tags$b("With spinner:"),
plotOutput(paste0("plot",.type)) %>% withSpinner(type=.type)
)
),
column(width=6,
wellPanel(
tags$b("Without spinner (default):"),
plotOutput(paste0("nospin_plot",.type))
)
)
)
)
}))
)
server <- function(input, output,session){
for (i in 1:8) {
output[[paste0("nospin_plot",i)]] <- output[[paste0("plot",i)]] <- renderPlot({
validate(need(input$show_plot, "Show plot is unchecked. Check to see plot."))
input$redraw_plot
Sys.sleep(5) # just for demo so you can enjoy the animation
df <- data.frame(x = runif(1e4), y = runif(1e4)
ggplot(df, aes(x,y))+ geom_point
})
}
}
shinyApp(ui, server)