ggvis直方图工具提示,用于识别箱中的元素

时间:2014-07-30 20:00:50

标签: r tooltip histogram ggvis

我想在ggvis直方图上创建一个工具提示,该工具提示将显示该bin中元素的标识。一个例子:

id <- gl(100, 1)
value <- rnorm(100)
df <- data.frame(id, value)
df %>% ggvis(~value) %>% layer_histograms

我想要一个悬停工具提示,它会给出该bin中包含的值的id,但我不知道如何让ggvis给我这个数据在add_tooltip中使用。

谢谢!

更新

当使用来自r2evans的tooltipFunc对一个整数变量使用大多数整数的情况时,它会在相邻的bin工具提示上给出重复的ID。要更正,只需更改不等号以引用左闭合间隔(默认为ggvis)。

tooltipFunc <- function(index, value) {
  function(x) {
    if (is.null(x)) return(NULL)
    else {
        paste(index[ (value >= x$xmin_ ) & (value < x$xmax_) ],
                  collapse=', ')
     }
  }
}

1 个答案:

答案 0 :(得分:2)

我今天早上在RStudio的webinar中看到了这个功能。感谢您的提问,无论如何,我的意思是要了解它。以下是一个黑客,我的第一次尝试,但它显示了它的易用性和力量:

tooltipFunc <- function(index, value) {
    function(x) {
        if (is.null(x)) return(NULL)
        else {
            strwrap(
                paste(index[ (value >= x$xmin_ ) & (value <= x$xmax_) ],
                      collapse=', '),
                width = 30)
        }
    }
}

df <- data.frame(id=gl(100,1), value=rnorm(100))
df %>%
    ggvis(~value) %>%
    layer_histograms() %>% 
    add_tooltip(tooltipFunc(df$id, df$value), 'hover')

这显示了bin中包含的所有$id。在这种情况下,x(传递给函数)是一个包含一行四列的data.frame:$xmin_$xmax_$stack_upr_和{{1 }}。因为该函数可能返回文字HTML,所以用它来获取一些自由并不难。

(这可以通过一个更简单的函数来完成,该函数假定存在$stack_lwr_ data.frame,但我认为它在当前形式中对于将来的数据集稍微可扩展。)