Home > Software design >  Shiny R: Can't display plot
Shiny R: Can't display plot

Time:10-16

I try to display interactive plots by using R shiny. I can successfully make the GUI and published, but the plots in tabPanel shows nothing, just like the picture shows below. There is the data I used (have been downloaded into my laptop).

I think problem may caused by the way how I preprocessing my data in server.R, but whatever I tried, it still display nothing. No Error shows when I run the app.

enter image description here

My code in ui.R:

library(shiny)

shinyUI(fluidPage(
  
  titlePanel("Data Viz Lab"),
  
  sidebarLayout(
    
    sidebarPanel(
      ## Add X-Variable select element
      selectInput(inputId = "var_x",
                  label = h5("X-Variable"), 
                  choices = c("Structure.Cost", "Land.Value", "Home.Value", "Home.Price.index"), 
                  selected = "Land.Value"),
      
      ## Add Fill Color select element
      selectInput(inputId = "color",
                  label = h5("Fill Color"), 
                  choices = c("brown", "yellow", "green", "blue", "red"), 
                  selected = "brown"),
      
      ## Add log-scale check box
      checkboxInput(inputId = "log",
                    label = "log-sclae for X-variable in Scatterplot?",
                    value = FALSE),
      
      ## Add Y-Variable select element
      selectInput(inputId = "var_y",
                  label = h5("Y-Variable"), 
                  choices = c("Structure.Cost", "Land.Value", "Home.Value", "Home.Price.index"), 
                  selected = "Structure.Cost"),
      
      ## Add Circle-Size side bar
      sliderInput(inputId = "size",
                  label = h5("Circle-Size"),
                  min = 1, 
                  max = 10,
                  value = 3),
      
      ## Add Outlier color select element
      selectInput(inputId = "color_out",
                  label = h5("Outlier Color"), 
                  choices = c("white", "yellow", "green", "blue", "red"), 
                  selected = "white")
      ), 
    
    mainPanel(
      
      tabsetPanel(  # Establish tabset panel
        tabPanel(
          # Tab1
          title = "Histogram",
          value = plotOutput(outputId = "hist")  # Add an figure in tab1
        ),
        tabPanel(
          # Tab2
          title = "Scatterplot",
          value = plotOutput(outputId = "scatter")  # Add an figure in tab2
         )
       )
     )
   )
  ))

My code in server.R:

library(shiny)
library(ggplot2)
library(sp)
library(dplyr)

# setwd()
landdata = read.csv("landdata.csv")
options(scipen = 999)

shinyServer(function(input, output) {

  ## Plotting Histogram
  output$hist = renderPlot({

    # Plotting
    if (input$log == FALSE){
      ggplot(landdata, aes_string(x = input$var_x))  
        geom_histogram(color = input$color)
    }else{
      ggplot(landdata, aes_string(x = input$var_x))  
        geom_histogram(color = input$color)  
        scale_x_log10(input$var_x)
    }

  })
  
  ## Plotting Scatter plot
  output$scatter = renderPlot({
    
    # Data pre-processing
    p = ggplot(data = landdata, aes_string(x = input$var_x, y = input$var_y))  
      geom_point()  
      stat_ellipse(type = "norm", level = 0.95, color = "black")
    
    build = ggplot_build(p)$data
    pts = build[[1]]
    elli = build[[2]]
    Outlier = point.in.polygon(pts$x, pts$y, elli$x, elli$y)
    
    landdata = cbind(landdata, Outlier)
    landdata$Outlier = ifelse(landdata$Outlier == 0, yes = "Y", no = "N") %>% factor(level = c("Y", "N"))
    
    # Plotting
    if (input$log == FALSE){
      ggplot(landdata, aes_string(x = input$var_x, y = input$var_y))  
        geom_point(aes(color = Outlier), size = input$size)  
        scale_color_manual(values = c(input$color, input$color_out))
    }else{
      ggplot(landdata, aes_string(x = input$var_x, y = input$var_y))  
        geom_point(aes(color = Outlier), size = input$size)  
        scale_color_manual(values = c(input$color, input$color_out))  
        scale_x_log10(input$var_x)
    }
      
  })
  
})

CodePudding user response:

The mistake lies in the tabPanel setup. value is not the correct argument for the plot. value is "the value that should be sent when tabsetPanel reports that this tab is selected" (taken from the manual). That means, value has the role of an id (like id argument of tabsetPanel or outputId of plotOutput).

Remove value = to make it work (the code snippet below gave me an output on my system).

tabsetPanel(  # Establish tabset panel
   tabPanel(
      # Tab1
      title = "Histogram",
      plotOutput(outputId = "hist")  # Add an figure in tab1
   ),
   tabPanel(
      # Tab2
      title = "Scatterplot",
      plotOutput(outputId = "scatter")  # Add an figure in tab2
   )
)

  • Related