我也苦思了一段时间。看起来你只能获取在ggvis()数据内的提示框信息。所以如果你有ggvis(~wt, ~mp),你可以在提示框中显示wt和mp。如果你有ggvis(~wt, ~mpg, fill= ~long),你可以在提示框中显示wt、mp和long。
或者是在layer_.....(fill = ~long ,stroke = ~name, strokeWidth := 0)中的数据。(我从行名创建了~name)你需要抑制stroke和legend以避免视觉影响: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、stroke、fill、opacity、shape、key(必须是唯一值)、text、font、fontsize等任何一个layer_......属性中存在的内容。
如果能够将数据框中不用于绘图但仅在TOOLTIP中可用的数据添加到ggplot中,那就太好了。 如果我找到方法,我也会在这里发布
我以这种方式添加了只在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)
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 提示框中添加包含在输入数据集中但不直接在可视化中的数据)
关键是链接到另一个数据集的唯一 !!!,以及在 ggvis() 之外返回数据和信息以在提示框中显示的函数。
我将我的代码更改为:
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") %>%
bind_shiny("plot", "plot_ui")
data
}
})
这样您就可以随心所欲地更改提示信息!
而且,如果您将两种方式(悬停 -> 摘要信息和单击 -> 所有信息)结合起来,效果会更好:
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") %>%
(对于回答如此冗长表示抱歉)