4

GGVIS に関する講演を見た後、最初の Shiny/ggvis アプリを作成しようとして失敗しました。私のプロットは R で動作しますが、それを Web に表示するために Shiny アプリに移行しようとすると、何も得られません。ラジオ ボタンが表示され、機能しているように見えます (rStudio/Shiny/Reactivity チュートリアルのテーブルを使用してテストしましたが、ggvis プロットでは適切に配置されていないようです)。私は Rstudio のチュートリアルに従い、ggvis ソース コードの demo フォルダーの一部を使用しています。ユーザー入力に基づいてデータをサブセット化し、分布を表示する単純なカーネル密度プロットを作成しようとしています。私がこれまでに持っているものの再現可能な例が添付されています。ここで何が欠けているかについての洞察をいただければ幸いです。

ui.R

# clear memory & load packages
      rm(list=ls())

      library(shiny)
      library(ggvis)

# Define UI for distribution application
    shinyUI(fluidPage(

# Application title
         titlePanel("Diamond Carats by Color/Cut"),

# Sidebar with controls to select subset
          sidebarLayout(
          sidebarPanel(
            radioButtons("cut", "Diamond Cut:",
                         c("Ideal" = "IDEAL",
                           "Premium" = "IDEAL",
                           "Good" = "GOOD",
                           "Very Good" = "VGOOD"))
          ),

#  Display your plot created by GGvis        
            mainPanel(ggvis_output("my_plot"))

          )
        ))

サーバー.R

# clear memory & load packages    
        rm(list=ls())

        library(shiny)
        library(ggvis)

# Define server logic for distribution application

        shinyServer(function(input, output, session) {

# load your data      
          dataset <- diamonds

# Reactive expression to generate the subset.      
          datasetInput <- reactive({                
            selection <-switch(input$cut,
                               IDEAL = "Ideal",
                               PREM = "Premium",
                               GOOD = "Good",
                               VGOOD = "Very Good") 

            subset(dataset, cut == selection)                   
          })


# Generate your plot using GGvis and your reactive inputs      
          gv <- reactive({

            ggvis(datasetInput(), by_group(color),
                  props(x = ~carat,
                        stroke = ~color,
                        fill = ~color,
                        fillOpacity := 0.2,
                        fillOpacity.hover := 0.7)) +
              layer_density()                                
          })


# necessary additions for ggvis integration to shiny        
          output$controls <- renderControls(gv)
          observe_ggvis(gv, "my_plot", session)               
        })

編集:この質問をフォローアップするために、次のものを削除すると気づきました:

            by_group(color)

            stroke = ~color, 
            fill = ~color,

server.R でグラフを作成するための呼び出しから、グラフが実行され (最初に求めていた多色のグループ化はありませんが)、ラジオ ボタンがデータ サブセットを正常に選択します。前述のように、リアクティブ サブセット関数を使用せずに R でグラフを実行しているとき、グラフを実行して、ダイヤモンドの色でストローク/塗りつぶしを変えることができます。この機能は、現時点で Shiny から ggvis へのインタラクションでサポートされていませんか? それとも、この関数を何らかの形で誤解しているだけですか? ここに私の更新されたコードがあるので、私の結果を見ることができます:

ui.R

# clear memory & load packages
      rm(list=ls())

      library(shiny)
      library(ggvis)

# Define UI for distribution application
    shinyUI(fluidPage(

# Application title
         titlePanel("Diamond Carats by Color/Cut"),

# Sidebar with controls to select subset
          sidebarLayout(
          sidebarPanel(
            radioButtons("cut", "Diamond Cut:",
                         c("Ideal" = "IDEAL",
                           "Premium" = "IDEAL",
                           "Good" = "GOOD",
                           "Very Good" = "VGOOD"))
          ),

#  Display your plot created by GGvis        
            mainPanel(ggvis_output("my_plot"))

          )
        ))

サーバー.R

# clear memory & load packages    
        rm(list=ls())

        library(shiny)
        library(ggvis)

# Define server logic for distribution application

        shinyServer(function(input, output, session) {

# load your data      
          dataset <- diamonds

# Reactive expression to generate the subset.      
          datasetInput <- reactive({                
            selection <-switch(input$cut,
                               IDEAL = "Ideal",
                               PREM = "Premium",
                               GOOD = "Good",
                               VGOOD = "Very Good") 

            subset(dataset, cut == selection)                   
          })


# Generate your plot using GGvis and your reactive inputs      
          gv <- reactive({

            ggvis(datasetInput(),
                  props(x = ~carat,
                        fillOpacity := 0.2,
                        fillOpacity.hover := 0.7)) +
              layer_density() 

          })


# necessary additions for ggvis integration to shiny        
          output$controls <- renderControls(gv)
          observe_ggvis(gv, "my_plot", session)               
        })
4

1 に答える 1

2

さらに検索すると、これは ggvis の既知のバグであることがわかります: https://github.com/rstudio/ggvis/issues/71

于 2014-03-11T18:07:39.627 に答える