1

我正在尝试通过改编电影资源管理器 exmaple 中的代码来学习如何一起使用 ggvis 和 shiny 。

我遇到了一个问题,当用户的交互向图表添加新数据时,如果有键,悬停效果对新数据不起作用。我希望能够保留密钥,因为我还想要一个工具提示。

下面是一个简单的示例。重现错误:
1) 运行闪亮的应用程序。
2) 使用选择框添加“b”点。
3) 现在“a”点在悬停时会增加大小,正如预期的那样,但“b”点不会。

为了获得正确的行为,我可以只注释掉 中的行server.r,但我不想这样做(因为我想添加工具提示)。我可以用反应性做些什么来获得所有点的悬停行为吗?

谢谢!

服务器.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")
})

用户界面

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 图中,我遇到了与键/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 回答