ggplot на R Shiny, против RStudio - PullRequest
       9

ggplot на R Shiny, против RStudio

0 голосов
/ 27 декабря 2018

По какой-то причине ggplot в «R Shiny» отличается от простого R в RStudio

, работающий Shiny-код -

library(ggplot2)
library(scales)
library(shiny)

ui <- fluidPage(

  # Sidebar layout with a input and output definitions
  sidebarLayout(

    # Inputs
    sidebarPanel(

      # Select variable for y-axis
      selectInput(inputId = "y", 
                  label = "Y-axis:",
                  choices = c("Water Level" = "WaterLevel", 
                              "Discharge Debit" = "DischargeDebit"), 
                  selected = "WaterLevel"),

      selectInput(inputId = "z", 
                  label = "station:",
                  choices = c(
                    "NORTH SASKATCHEWAN RIVER NEAR DEER CREEK"="05EF001",
                    "BATTLE RIVER NEAR PONOKA"="05FA001",
                    "BATTLE RIVER AT DUHAMEL"="05FA011",
                    "PIGEON LAKE AT PIGEON LAKE PROVINCIAL PARK"="05FA013",
                    "MASKWA CREEK NO. 1 ABOVE BEARHILLS LAKE"="05FA014"
), 
selected = "05EF001")

    ),

    # Output
    mainPanel(
      plotOutput(outputId = "lineplot")
    )
  )
)



server <- function(input, output) {
file = "http://dd.weather.gc.ca/hydrometric/csv/SK/hourly/SK_hourly_hydrometric.csv"
skdat <- read.csv(file, head=T, sep=",", dec=".", stringsAsFactors = F)
colnames(skdat) <- c("ID", "Date", "WaterLevel", "Grade1", "Symbol1",
                     "QAQC-1", "DischargeDebit", "Grade2", "Symbol2",
                     "QAQC-2")

subds <- subset(skdat, ID=input$z)
subds$datetime <- as.POSIXct(subds$Date, format = "%Y-%m-%dT%H:%M:%OS")
output$lineplot <- renderPlot({ 
  ggplot(subds, aes(x = datetime, y = !!as.name(input$y))) + geom_line() 
})  


}

# Create a Shiny app object
shinyApp(ui = ui, server = server)

и код RStudio, который выдает правильныйГрафик

library(ggplot2)
library(scales)
library(shiny)
library(stringi)



file = "http://dd.weather.gc.ca/hydrometric/csv/SK/hourly/SK_hourly_hydrometric.csv"
skdat <- read.csv(file, head=T, sep=",", dec=".", stringsAsFactors = F)
colnames(skdat) <- c("ID", "Date", "WaterLevel", "Grade1", "Symbol1",
                     "QAQC-1", "DischargeDebit", "Grade2", "Symbol2",
                     "QAQC-2")

subds <- subset(skdat, ID=='05EF001')
#subds$datetime <- as.POSIXct(subds$Date, format = "%Y-%m-%dT%H%m%S")
subds$datetime <- as.POSIXct(subds$Date, format = "%Y-%m-%dT%H:%M:%OS")#subds$datetime <- as.POSIXct(subds$Date, format = "%Y-%m-%dT%H%m%S-06:00")

p2 <- ggplot(subds, aes(x = datetime, y = WaterLevel)) + geom_line()
p2

должно быть что-то не так с линией рендеринга в блестящем коде?

output$lineplot <- renderPlot({ 
  ggplot(subds, aes(x = datetime, y = !!as.name(input$y))) + geom_line() 
})

График Shiny представляет собой черный блок без видимой линии,любая помощь с этим будет принята с благодарностью.

Спасибо, Джейк!это помогло ниже сделал трюк

#subds <- subset(skdat, ID=input$z)
#subds$datetime <- as.POSIXct(subds$Date, format = "%Y-%m-%dT%H:%M:%OS")
#output$lineplot <- renderPlot({ 
#  ggplot(subds, aes(x = datetime, y = !!as.name(input$y))) + geom_line() 
#})  


output$lineplot <- renderPlot({
  subds <- subset(skdat, ID == input$z)
  subds$datetime <- as.POSIXct(subds$Date, format = "%Y-%m-%dT%H:%M:%OS")
  ggplot(subds, aes(x = datetime, y = !!as.name(input$y))) +
    geom_line()

1 Ответ

0 голосов
/ 27 декабря 2018

Нет разницы в ggplot2 графике между просмотром в RStudio или Shiny. - это разница в коде, который вы использовали для обоих.

  1. Нет логического утверждения в вашем подмножестве (вы использовали =, когда вы намеревались ==)
  2. При значении 1 ваш набор данных должен быть обернут в reactive
  3. Хотя вы можете использовать as.name, если вы заполняете tidyeval, вы также можете использовать правильное соответствиеиз sym.

Приведенный ниже код работает, но вы можете проверить идентификаторы, по которым вы хотите фильтровать в условиях ввода.Не уверены, если они будут добавлены позже, но они не существуют в ваших данных, как есть.

library(ggplot2)
library(scales)
library(shiny)

ui <- fluidPage(

  # Sidebar layout with a input and output definitions
  sidebarLayout(

    # Inputs
    sidebarPanel(

      # Select variable for y-axis
      selectInput(inputId = "y", 
                  label = "Y-axis:",
                  choices = c("Water Level" = "WaterLevel", 
                              "Discharge Debit" = "DischargeDebit"), 
                  selected = "WaterLevel"),

      selectInput(inputId = "z", 
                  label = "station:",
                  choices = c(
                    "NORTH SASKATCHEWAN RIVER NEAR DEER CREEK"="05EF001",
                    "BATTLE RIVER NEAR PONOKA"="05FA001",
                    "BATTLE RIVER AT DUHAMEL"="05FA011",
                    "PIGEON LAKE AT PIGEON LAKE PROVINCIAL PARK"="05FA013",
                    "MASKWA CREEK NO. 1 ABOVE BEARHILLS LAKE"="05FA014"
                  ), 
                  selected = "05EF001")

    ),

    # Output
    mainPanel(
      plotOutput(outputId = "lineplot")
    )
  )
)



server <- function(input, output) {
  file = "http://dd.weather.gc.ca/hydrometric/csv/SK/hourly/SK_hourly_hydrometric.csv"
  skdat <- read.csv(file, head=T, sep=",", dec=".", stringsAsFactors = F)
  colnames(skdat) <- c("ID", "Date", "WaterLevel", "Grade1", "Symbol1",
                       "QAQC-1", "DischargeDebit", "Grade2", "Symbol2",
                       "QAQC-2")

  # Switched the date time to skdat from subds to not mess with reactivity until later
  skdat$datetime <- as.POSIXct(skdat$Date, format = "%Y-%m-%dT%H:%M:%OS")

  # You need to have a logical condition for subset, == not =
  subds <- reactive({subset(skdat, ID == input$z)})

  # Switched the use of as.name to rlang::sym 
  output$lineplot <- renderPlot({ 
    ggplot(subds(), aes(x = datetime, y = !!sym(input$y))) + geom_line() 
  })  


}

# Create a Shiny app object
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...