3

ユーザーが特定のグループを選択して 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"))
  )
))

サーバー.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

また、別のエラーが発生するソリューションでの他の試みの1つを含むgithubリポジトリと、機能するが再マッピングの問題があるコードを取得しました: https://github.com/JoFrhwld/ggvis_scales

編集:これはggvis v0.3、dplyr v0.3、およびshiny v0.10であると言わなければなりません

4

1 に答える 1

5

答えは、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")
})
于 2014-09-28T14:06:23.483 に答える