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)
})