[英]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.