1

映画エクスプローラーの例のコードを適応させることにより、ggvisとshinyを一緒に使用する方法を学ぼうとしています。

ユーザーの操作によって新しいデータがグラフに追加されたときに、キーがある場合にホバー効果が新しいデータに対して機能しないという問題に遭遇しました。ツールチップも必要なので、キーを保持できるようにしたいと思います。

簡単な例を以下に示します。バグを再現するには:
1) 光沢のあるアプリを実行します。
2) 選択ボックスを使用して、「b」ポイントを追加します。
3) 期待どおり、「a」ポイントはホバーするとサイズが大きくなりますが、「b」ポイントは大きくなりません。

適切な動作を得るには、 の行をコメント アウトするだけで済みますserver.rが、それはしたくありません (ツールチップを追加したいため)。すべてのポイントでホバー動作を取得するためにリアクティブでできることはありますか?

ありがとうございました!

server.r

library(ggvis)

# Set up data on app start
all_data <- data.frame(x=1:4, y=1:4, z=c("a", "b", "b", "a"), ID=1:4)

shinyServer(function(input, output, session) {

  # Filter the data
  this_data <- reactive({
    all_data[all_data$z %in% input$z, ]
  })

  # A reactive expression with the ggvis plot
  vis <- reactive({
    this_data %>%
      ggvis(~x, ~y) %>%
      layer_points(fill = ~z, 
        key := ~ID, # Comment out this line for proper behavior
        size := 50, size.hover := 500, 
        fillOpacity := 0.9, fillOpacity.hover := 0.5)
  })

  vis %>% bind_shiny("plot1")
})

ui.r

library(ggvis)

shinyUI(fluidPage(
  titlePanel("Example"),
  fluidRow(
    column(3,
      wellPanel(
        selectInput("z", "Select Z", c("a", "b"), 
          selected = "a", multiple=TRUE)
      )
    ),
    column(9,
      ggvisOutput("plot1")
    )
  )
))
4

1 に答える 1

1

これは私をかなり混乱させました。グループの追加/ポイントの追加など、さまざまな奇妙な方法で複製できました。グループを追加して削除する順序も、奇妙なことをしました。

映画の例の後に作成した独自の光沢のある/ggvis プロットの 1 つで、キー/ID に同様の問題があり、すべてのデータ フィルタリングの後に ID を追加するとうまくいくことがわかりました。ここでは、フィルタリング後に ID 変数を追加してみましたが、それでも機能しませんでした。ただし、新しいリアクティブに追加しました。

これが私のggvis/shinyで、似たようなことをしなければなりませんでした - https://jalapic.shinyapps.io/cricket と生のコード - https://github.com/jalapic/shinyapps/blob/master/cricket/server. R

これはうまくいくと思います-少なくとも私にとっては。事実上、データ設定から ID を削除していることに注意してください。次に、最初のリアクティブでフィルタリングが行われた後、新しいリアクティブに追加します。

# Set up data on app start
all_data <- data.frame(x=c(1,3:5), y=1:4, z=c("a", "b", "b", "a"))

shinyServer(function(input, output, session) {

  # Filter the data
  this_data <- reactive({

   all_data[all_data$z %in% input$z, ] 


  })

  this_data1 <- reactive({

  as.data.frame(this_data() ) %>% mutate(ID = row_number(x))
  })


  # A reactive expression with the ggvis plot
  vis <- reactive({
    this_data1 %>%
      ggvis(~x, ~y) %>%
      layer_points(fill = ~z, 
                   key := ~ID, # Comment out this line for proper behavior
                   size := 50, size.hover := 500, 
                   fillOpacity := 0.9, fillOpacity.hover := 0.5)
  })

  vis %>% bind_shiny("plot1")
}) 
  • %>% mutate(row_number()) コマンドを使用して ID 変数を追加したことを追加するdplyr必要がありますが、これがあなたに合わない場合は、別の方法でそれを行うことができると確信しています。
于 2014-12-14T01:24:11.487 に答える