簡體   English   中英

鼠標懸停時Rstudio閃亮的ggvis工具提示

[英]Rstudio shiny ggvis tooltip on mouse hover

在下面的例子,我有一個互動的閃亮ggvis情節,但我添加了一個long列,它是一個長字符串,由於某種原因,我懸停彈出顯示wtmpg但不顯示long

此外,如果圖例中的元素列表太長,它們將隱藏在圖的右下角。 有沒有辦法在圖例中的幾列中堆疊這些?

有任何想法嗎?

# ui.R
library(ggvis)
shinyUI(pageWithSidebar(
  div(),
  sidebarPanel(
    sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),
                value = 10, step = 1),
    uiOutput("plot_ui")
  ),
  mainPanel(
    ggvisOutput("plot"),
    tableOutput("mtc_table")
  )
))


# server.R
library(shiny)
library(ggvis)
shinyServer(function(input, output, session) {
  # A reactive subset of mtcars
  mtc <- reactive({
      data = mtcars[1:input$n, ]
      data$long = as.character(paste0("A car with ",data$cyl," cylinders and ",data$gear," gears and ",data$carb, " carburators"))
      data
  })
  # A simple visualisation. In shiny apps, need to register observers
  # and tell shiny where to put the controls
  mtc %>%
    ggvis(~wt, ~mpg) %>%
    layer_points(fill = ~factor(long)) %>%
    add_tooltip(function(data){paste0("Wt: ", data$wt, "<br>", "Mpg: ",as.character(data$mpg), "<br>", "String: ", as.character(data$long))}, "hover") %>%
    bind_shiny("plot", "plot_ui")

   output$mtc_table <- renderTable({
     mtc()[, c("wt", "mpg", "long")]
   })
})

您需要在提供給add_tooltip的匿名函數中添加long作為鍵,當前data$long為null:

library(shiny)
library(ggvis)

runApp(list(ui = pageWithSidebar(
  div(),
  sidebarPanel(
    sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),
                value = 10, step = 1),
    uiOutput("plot_ui")
  ),
  mainPanel(
    ggvisOutput("plot"),
    tableOutput("mtc_table")
  )
)
, server= function(input, output, session) {
  # A reactive subset of mtcars
  mtc <- reactive({
    data = mtcars[1:input$n, ]
    data$long = as.character(paste0("A car with ",data$cyl," cylinders and ",data$gear," gears and ",data$carb, " carburators"))
    data
  })
  # A simple visualisation. In shiny apps, need to register observers
  # and tell shiny where to put the controls
  mtc %>%
    ggvis(~wt, ~mpg, key:= ~long) %>%
    layer_points(fill = ~factor(long)) %>%
    add_tooltip(function(data){
      paste0("Wt: ", data$wt, "<br>", "Mpg: ",as.character(data$mpg), "<br>", "String: ", as.character(data$long))
    }, "hover") %>%
    bind_shiny("plot", "plot_ui")

  output$mtc_table <- renderTable({
    mtc()[, c("wt", "mpg", "long")]
  })
})
)

在此輸入圖像描述

我一直在困惑這一點。 看來,你只能得到TOOLTIP信息那就是ggvis()里面的數據。 因此,如果你有ggvis(~wt,~mp),你可以在工具提示中顯示wt和mp。 如果你有ggvis(~wt,~mpg,fill = ~long)你可以在工具提示中顯示wt,mp,long。 或者是層_的數據。(fill = ~long,stroke = ~name,strokeWidth:= 0)。 (我從行名創建〜名稱)你需要抑制筆畫和圖例以避免視覺沖擊:hide_legend(“stroke”)%>%

據我所知,ggvis限制了工具提示中顯示的信息量到包含的內容(非常容易理解)

如果我們查看文檔:

***Usage***
ggvis(data = NULL, ..., env = parent.frame())

***Arguments***
data A data object.

... Property mappings. If not named, the first two mappings are taken to be x and y. 

Common properties are x, y, stroke, fill, opacity, shape

env Environment in which to evaluate properties.

所以我們可以添加x,y,筆划,填充,不透明度,形狀,鍵(必須是唯一值),文本,字體,字體大小等等或其中一個圖層_.....屬性。

如果可以將數據幀數據添加到未在繪圖中使用但僅在TOOLTIP中可用的 ggplot,那將會很好 如果我找到了一種方法,我也會在這里發布

我添加了僅在工具提示中以這種方式顯示的隱形名稱信息(基於前面的示例):

mtc <- reactive({
  if(length(input$n)>0){
    data = mtcars[1:input$n, ]
    data$long = as.character(paste0("A car with ",data$cyl," cylinders and     ",data$gear," gears and ",data$carb, " carburators"))
    data$name <- rownames(data) 

  data %>%
    ggvis(~wt, ~mpg) %>%
    layer_points(fill = ~long ,stroke = ~name, strokeWidth := 0) %>%
    hide_legend("stroke") %>%
    add_tooltip(function(dataT){
      paste0("Car: ",dataT$name, "<br>", "Wt: ", dataT$wt, "<br>",
      "Mpg: ",as.character(dataT$mpg), "<br>", "String: ", as.character(dataT$long))
    }, "hover") %>%
    bind_shiny("plot", "plot_ui")

  data
  }
})

對於更好,更穩定的解決方案的建議非常歡迎! ; ^)


好的,我找到了一種方法來顯示工具提示中不在ggvis圖中的所有數據:(另請參閱: 向ggvis工具提示添加數據,該數據包含在輸入數據集中但不直接在vis中

關鍵是獨一無二!!! 鏈接到另一個數據集和ggvis() 外部的函數,該函數返回要在TOOLTIP中顯示的數據和信息

我將代碼更改為:

mtc <- reactive({
  if(length(input$n)>0){
    data = mtcars[1:input$n, ]
    data$long = as.character(paste0("A car with ",data$cyl," cylinders and ",data$gear," gears and ",data$carb, " carburators"))
    data$name <- rownames(data) 


  all_values <- function(x) {
    if(is.null(x)) return(NULL)
    row <- data[data$name == x$name, ]
    paste0(names(row), ": ", format(row), collapse = "<br />")
  }

  data %>%
    ggvis(~wt, ~mpg, key := ~name) %>%
    layer_points(fill = ~long) %>%

    add_tooltip(all_values, "hover")  %>%
#       add_tooltip(function(dataT){
#       paste0("Car: ",dataT$name, "<br>", "Wt: ", dataT$wt, "<br>", "Mpg: ",as.character(dataT$mpg), "<br>", "String: ", as.character(dataT$long))
#       }, "hover") %>%
    bind_shiny("plot", "plot_ui")

  data
  }
})

這樣您就可以以您想要的任何方式更改工具提示信息!

在此輸入圖像描述


如果你可以用這種方式將兩者結合起來(Hover - >摘要信息&&點擊 - >所有信息):

mtc <- reactive({
  if(length(input$n)>0){
    data = mtcars[1:input$n, ]
    data$long = as.character(paste0("A car with ",data$cyl," cylinders and ",data$gear," gears and ",data$carb, " carburators"))
    data$name <- rownames(data) 


  all_values <- function(x) {
    if(is.null(x)) return(NULL)
    row <- data[data$name == x$name, ]
    paste0(names(row), ": ", format(row), collapse = "<br />")
  }

  data %>%
    ggvis(~wt, ~mpg, key := ~name) %>%
    layer_points(fill = ~long) %>%

    add_tooltip(all_values, "click")  %>%
    add_tooltip(function(dataT){
      paste0("Car: ",dataT$name, "<br>", "Wt: ", dataT$wt, "<br>", "Mpg: ",as.character(dataT$mpg), "<br>", "String: ", as.character(dataT$long))
      }, "hover") %>%
    bind_shiny("plot", "plot_ui")

  data
  }
})

只是為了完成!

甚至完成 - >工具提示只是HTML代碼作為字符串 - >所以在某種程度上你可以創建你想要顯示的任何HTML頁面。 你只是不能指出它,因為一旦你離開這一點它就會消失! (但您可以在同一點點擊操作以補充(例如重定向頁面)懸停操作。)

只是工具提示中圖像的最后一個簡短示例:

  add_tooltip(function(img){'<img src="pic_mountain.jpg" alt="Mountain View" style="width:100px;height:100px;">'}, "hover") %>%

(對不起,答案很長)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM