r2d3
https://cran.r-project.org/web/packages/r2d3/
https://cran.r-project.org/web/packages/r2d3/r2d3.pdf
https://blog.rstudio.com/2018/10/05/r2d3-r-interface-to-d3-visualizations/
r2d3: R Interface to D3 Visualizations
> install.packages("r2d3") > library("devtools") > devtools::install_github("rstudio/r2d3")
r2d3(data = c(0.3, 0.6, 0.8, 0.95, 0.40, 0.20), script= system.file("examples/barchart.js", package="r2d3"))
D3 visualizations
https://github.com/d3/d3/wiki/Gallery
https://bl.ocks.org/
https://vida.io/explore:
D3 Scripts
File > New File >D3 Script (A simple template for a D3 script)
setwd("C:/Users/Administrator/Documents/RSource/d2visual") library("r2d3") r2d3(data = c(0.3, 0.6, 0.8, 0.95, 0.40, 0.20), script= "simplebar.js")
Using r2d3 with Shiny
https://rstudio.github.io/r2d3/articles/shiny.html
library("shiny") library("tidyverse") library("r2d3") ui <- fluidPage( inputPanel( sliderInput("bar_max", label="Max:", min=0.1, max=1.0, value=0.2, step=0.1) ), d3Output("d3"), verbatimTextOutput("selected") ) server <- function(input, output) { output$d3 <- renderD3({ r2d3( data=runif(5, 0, input$bar_max), options=list( color='orange'), script = "bar.js" ) }) output$selected <- renderText({ bar_number <- req(input$bar_clicked) bar_number %>% as.numeric() }) } shinyApp(ui, server)
var barHeight = Math.ceil(height/data.length); //console.log(barHeight); var bars = r2d3.svg.selectAll('rect').data(r2d3.data); bars .enter().append('rect') .attr('width', function(d){ return d*width; }) .attr('height', barHeight*0.9) .attr('y', function(d, i){ return i*barHeight; }) .attr('fill', options.color); bars .exit().remove(); bars .transition() .duration(66) .attr("width", function(d) { return d * width; }); bars .attr("d", function(d) { return d; }) .on("click", function(){ Shiny.setInputValue( "bar_clicked", value=d3.select(this).attr("d"), {priority: "event"} );});
dashboard
library("shiny") library("shinydashboard") library("shinydashboardPlus") library("tidyverse") library("r2d3") library("webshot") # for save_d3_png() function r # webshot::install_phantomjs()) ui <- dashboardPagePlus(collapse_sidebar=T, header = dashboardHeaderPlus(), sidebar = dashboardSidebar(), rightsidebar = rightSidebar(), body = dashboardBody( fluidRow( column(6, sliderInput("bar_max", label="Max:",min=0.1, max=1.0, value=0.2, step=0.1) ), column(6, verbatimTextOutput("D3_friendly_data"), verbatimTextOutput("selected") ) ), fluidRow( d3Output("d3", width = "100%", height = "400px") ) ), footer = dashboardFooter() ) server <- function(input, output) { observeEvent(input$bar_max, { dd <- runif(5, 0, input$bar_max) output$D3_friendly_data <- renderText({ as_d3_data(dd) }) viz <- r2d3(data=dd, script = "bar.js", css = "auto", dependencies = "d3-jetpack", options=list( color='orange'), d3_version = c("5", "4", "3"), container = "svg", viewer = c("internal", "external", "browser") ) #save_d3_html(viz, file = tempfile(fileext = ".html"), selfcontained = FALSE) #save_d3_png(viz, file, background = "white", width = 992, height = 744, delay = 0.2, zoom = 1) output$d3 <- renderD3({ viz }) }) output$selected <- renderText({ bar_number <- req(input$bar_clicked) bar_number %>% as.numeric() }) } shinyApp(ui, server)