Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting xlim for rbokeh plot inside shiny application

I'm using the rbokeh package for R. I've been having some good results integrating into a shiny app. I want to now integrate a feature where a dateRangeInput will now select the date range for the chart(it is time series data).

##necessary packages

install.packages("shiny")
install.packages("devtools")
install.packages("dplyr")
library(devtools)
devtools::install_github("ramnathv/htmlwidgets")
devtools::install_github("bokeh/rbokeh")
library(rbokeh)
library(dplyr)
library(shiny)

#example data set

james<-mtcars[c("mpg")]
james$date<-seq(from=as.Date("2013-05-16"),to=as.Date("2013-06-16"),by="days")
james$index<-1:4

#shiny app

shiny_example <- function(chart_data = james){

  date_minmax <- range(chart_data$date)

  shinyApp(
    ui=fluidPage(
      titlePanel("a plot"),
      sidebarLayout(
        sidebarPanel(
          textInput("index","Enter the index from 1 to 16",value=1),
          uiOutput("date_range")
        ),
        mainPanel(
          rbokeh::rbokehOutput("plot_cars")
        )
      )
    ),
    server=function(input,output,session)
    {
      current_data <- reactive({
        current_df <- subset(james,index==input$index)
        return(current_df)
      })
      output$date_range <- renderUI({
        plot_data <- current_data()
        current_id_range <- range(plot_data$date)
        return(
          dateRangeInput("date_range",
                         "Date Range(X Axis",
                         min=date_minmax[1],
                         max=date_minmax[2],
                         start=current_id_range[1],
                         end=current_id_range[2])
        )
      })
      output$plot_cars <- rbokeh::renderRbokeh({
        plot_data <- current_data()
        g<-rbokeh::figure(title="Cars",
                          width=800,
                          heigh=400,
                          xlab="Date",
                          ylab="mpg",
                          xlim=input$date_range) %>%
          rbokeh::ly_points(date,
                            mpg,
                            data=plot_data) %>%
          rbokeh::ly_lines(date,
                           mpg,
                           data=plot_data,
                           alpha=0.3)
        return(g)
      })
    }

  )
}
##run the app

shiny_example()

The above is example data but it works without the xlim argument in rbokeh::figure, as in that typing in a number from 1 to 4 in the input subsets the data accordingly and produces a plot reactively. The xlim argument seems to produce errors in the plot. Could anyone perhaps point me in the right direction in trying to fix the xlim issue?

Let me know if you need any more details.

like image 518
Jimbo Avatar asked Nov 09 '22 09:11

Jimbo


1 Answers

It seems to be a date formatting issue in rbokeh: https://github.com/bokeh/rbokeh/issues/100 which should be fixed soon.

like image 140
Jimbo Avatar answered Nov 15 '22 06:11

Jimbo