[英]Rstudio shiny ggvis tooltip on mouse hover
在下面的例子,我有一個互動的閃亮ggvis情節,但我添加了一個long
列,它是一個長字符串,由於某種原因,我懸停彈出顯示wt
和mpg
但不顯示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.