簡體   English   中英

我無法通過反應輸入獲得ggvis標度

[英]I can't get ggvis scales to remain fixed with reactive input

我正在嘗試創建一個閃亮的應用程序,允許用戶選擇某些組來繪制ggvis圖。 我遇到的問題是,如果我將反應數據映射到點的屬性(如點填充,形狀等),則每次用戶更新組時,比例都會重置。 因此,組標識到填充顏色的映射不會保持不變。 我嘗試通過硬編碼組ID來修復此問題以填充反應元素中的顏色,但是當應用程序開始加載時,我開始難以解釋錯誤。

這是我第一次嘗試的代碼:

ui.R

#ui.R
library(shiny)
library(ggvis)

shinyUI(fluidPage(

  # Application title
  titlePanel("Old Faithful Geyser Data"),

  # Sidebar with a slider input for number of bins
  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("gear", label = "Gears", choices = c("3","4","5")) 
    ),

    # Show a plot of the generated distribution
    mainPanel(
      uiOutput("ggvis_ui"),
      ggvisOutput("ggvis"),
      textOutput("jawn"))
  )
))

server.R

#server.R
library(shiny)
library(ggvis)
library(dplyr)

shinyServer(function(input, output) {

    selected <- reactive(input$gear)

    selectedData <- reactive({
      mtcars %>%
        filter(gear %in% selected())%>%
        mutate(gear = as.character(gear))
    })

    colorRange <- reactive({
      c(`3` = "red", `4` = "blue", `5` = "green")[sort(selected())]
    })

    output$jawn <- renderText(colorRange())


    mtcars%>%
      ggvis(~wt, ~mpg)%>%
      layer_points()%>%
      layer_points(data = selectedData, fill = ~gear)%>%
      scale_ordinal("fill", range = colorRange) %>% 
      bind_shiny("ggvis", "ggvis_ui")
})

當我運行這個時,我得到錯誤:

Error : x is not a numeric or integer vector

我還有一個github存儲庫,其中一個我的其他嘗試解決方案,它得到一個不同的錯誤,代碼有效,但有重映射問題: https//github.com/JoFrhwld/ggvis_scales

編輯:我應該說這是ggvis v0.3,dplyr v0.3和閃亮的v0.10

答案,感謝ggvis google小組

  • 硬編碼比例尺的范圍和范圍,但不是反應性的。
  • group_by()分類數據,以抑制無意義的動畫。

因此,新的server.R代碼

# server.R
library(shiny)
library(ggvis)
library(dplyr)

shinyServer(function(input, output) {

    selected <- reactive(input$gear)

    selectedData <- reactive({
      mtcars %>%
        filter(gear %in% selected())%>%
        mutate(gear = as.character(gear))%>%
        group_by(gear)
    })

    fill_domain = c("3","4","5")
    fill_range = c("red","blue","green")

    mtcars%>%
      ggvis(~wt, ~mpg)%>%
      layer_points()%>%
      layer_points(data = selectedData, fill = ~gear)%>%
      scale_ordinal("fill", range = fill_range, domain = fill_domain)%>%
      bind_shiny("ggvis", "ggvis_ui")
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM