0

I have been working on this shiny app for a while and it all seems to work till i get to the end. It is supposed to output a interactive scatter plot. Well I can get the plot to the point that it has a legend and the hover text pops up on a white blank background, but i am missing the visual points and the map. Outside of shiny i can make the plotly work just fine and i get my mapbox map and scatter plots. I have tired quite a few things but am still failing to render the points and the map. Is there a quark in shiny holding my map back from rendering with the points that i am missing here? I also am getting this error that goes away when i remove the size or color function from my plot.

Error:

 Warning: `line.width` does not currently support multiple values.

Ui:

library(readxl)
library(plyr)
library(dplyr)
library(plotly)
library(readr)
library(RColorBrewer)
library(data.table)
library(shiny)
library(shinydashboard)
library(shinythemes)
library(leaflet)
library(DT)
library(xtable)




ui <- fluidPage(theme = shinytheme("slate"), mainPanel(
  navbarPage(
    "Permian Plots", collapsible = TRUE, fluid = TRUE,
    navbarMenu(
      "County Plot",
      tabPanel( "Data Frame",
            fluidRow(box(DT::dataTableOutput("contents"))),


        sidebarPanel( fileInput(
          'file1',
          'Choose CSV File',
          accept = c('text/csv', 'text/comma-separated-values,text/plain', '.csv')
        ),
        tags$hr(),
        checkboxInput('header', 'Header', TRUE),
        # App buttons comma and quote
        radioButtons('sep', 'Separator',
                     c(
                       Comma = ',',
                       Semicolon = ';',
                       Tab = '\t'
                     ), ','),
        radioButtons(
          'quote',
          'Quote',
          c(
            None = '',
            'Double Quote' = '"',
            'Single Quote' = "'"
          ),
          '"'
        ))
      ),

      tabPanel("County Plot", plotlyOutput(
        "plotMap", height = 1000, width = 1400
      ),
      actionButton("btn", "Plot")
               )
    )
  )
)

)

Server:

server <- function(input, output, session) {

  options(shiny.maxRequestSize = 1000*1024^2) 

  data_set <- reactive({
    inFile <- input$file1

    if (is.null(inFile)){
      return()
    }

    data_set <- read.csv(
      inFile$datapath,
      header = input$header,
      sep = input$sep,
      quote = input$quote

    )
  })

  output$contents <- DT::renderDT({
    withProgress(message = 'loading...', value = 0.1, {

      datatab <- datatable(data_set(), 
                options = list(
        "pageLength" = 10,
         scrollX = TRUE))
      extensions = 'Responsive' 
      setProgress(1)
      datatab

    })

  })


  observeEvent(
    input$btn,
    { 
      output$plotMap <- renderPlotly({withProgress(message = 'Plotting...', value = 0.1,{

          plots <- function(f1){ 

          f1 <- as.data.frame(f1)

          f1$Date <- as.POSIXct(f1$Date)

          f1$CNorm <- f1$Cell.Sum..Norm.

          f1$year <- format(as.POSIXct(f1$Date,format="%y-%m-%d"), "%y")
          f1$month <- format(as.POSIXct(f1$Date,format="%y-%m-%d"), "%m")

          f1$Cell <- as.factor(f1$Cell)

          z <- f1 %>%
            group_by(.dots = c("year", "month", "Cell")) %>%
            dplyr::summarise(yearMonth_Max_sum = max(CNorm))

          f1 <- inner_join(f1,z, by = c("year", "month", "Cell"))


          f1$Changed <- as.numeric(as.factor(f1$Changed))
          f1$Changed[f1$Changed == 1] <- 0
          f1$Changed[f1$Changed == 2] <- 1

          z <- f1 %>%
            group_by(.dots = c("year", "month", "Cell")) %>%
            dplyr::summarise(ChangedX = max(Changed))

          f1 <- inner_join(f1,z, by = c("year", "month", "Cell"))

          f1$MY <- paste(f1$year, f1$month, sep = "-")

          #preapring data for plotly

          q <- matrix(quantile(f1$StdDev))

          f1$qunat <- NA

          up <- matrix(quantile(f1$StdDev, probs = .95))

          f1$qunat <- ifelse((f1$StdDev > q[4:4,1]) & (f1$StdDev < up[1,1]), 1, 0)

          z <- group_by(f1, Cell) %>%
            dplyr::summarize(Median_Cell = median(CNorm), na.rm = FALSE)

          f1 <- inner_join(f1,z, by = c("Cell"))

          f1$NewMedian <- NA
          f1$NewMedian[f1$Median_Cell > 4000] <- 0
          f1$NewMedian[f1$Median_Cell <= 4000] <- 1

          f1$NewSum <- NA
          f1$NewSum <- f1$yearMonth_Max_sum * f1$ChangedX * f1$qunat * f1$NewMedian

          f1$hover <- with(f1,paste("Sum", f1$yearMonth_Max_sum, "/<br>", 
          "Standard Dev", f1$StdDev, "/<br>", 
          "Mean", f1$Average, "/<br>", 
          "Median", f1$Median_Cell, "/<br>",
          "Changed", f1$ChangedX, "/<br>", 
          "Latitude", f1$Lat , "/<br>", 
          "Longitude", f1$Lon))

          f1 <- f1[which(f1$yearMonth_Max_sum < 9000), ]
          f1 <<- f1[!duplicated(f1$yearMonth_Max_sum), ]

          ##################
          Sys.setenv('MAPBOX_TOKEN' = '')
          Sys.getenv("MAPBOX_TOKEN")

          plot <- f1 %>%
            plot_mapbox(
                        lon = ~Lon, 
                        lat = ~Lat, 
                        size = ~yearMonth_Max_sum,
                        color = ~NewSum,
                        frame = ~MY, 
                        type = 'scattermapbox',
                        mode = "markers",
                        colors = c("green","blue")
            ) %>%
            add_markers(text = ~f1$hover) %>%
            layout(title = "County Plot",
                   font = list(color = "black"),
                   mapbox = list(style = "satellite-streets", zoom = 9,
                                 center = list(lat = median(f1$Lat),
                                               lon = median(f1$Lon))))

          return(plot)

          }

         plots(data_set())

      })


    })
    }
  )

}

shinyApp(ui = ui, server = server) 
Clinton Woods
  • 249
  • 1
  • 2
  • 11
  • 2
    Can you reduce your question/example to just be a simple shiny app with a small example data set and a single `render` call to render the map. Without any data it's hard for others to help you. – SymbolixAU Aug 06 '18 at 22:58
  • 1
    And, it's generally not wise to expose your API key like that. – SymbolixAU Aug 06 '18 at 22:58

0 Answers0