我一直在使用漂亮的ggvis包。我正在进行自定义线性回归,并希望工具提示显示有关每个数据点的信息。但是,当我添加回归线时,当我将鼠标悬停在线上时会显示工具提示,然后显示有关第一个数据点的信息(参见屏幕截图)。我提供了这个简单可重复的例子:
library(ggvis)
mtc <- mtcars
lm=with(mtc,lm(mpg~wt))
mtc$fit=lm$coefficients[1]+mtcars$wt*lm$coefficients[2]
mtc$id <- 1:nrow(mtc) # Add an id column to use ask the key
all_values <- function(x) {
if(is.null(x)) return(NULL)
row <- mtc[mtc$id == x$id, ]
paste0(names(row), ": ", format(row), collapse = "
")
}
mtc %>% ggvis(x = ~wt, y = ~mpg, key := ~id) %>%
layer_points() %>%layer_lines(x= ~wt,y= ~fit)%>%
add_tooltip(all_values, "hover")
这会生成此
我想从工具提示中排除回归线,因此它只显示有关数据点的信息。有没有办法实现这个目标?谢谢您的帮助!
答案 0 :(得分:3)
经过一段时间的游戏,我得到了它的工作。
首先,我需要为此构建两个单独的数据集。一个用于线性模型数据,一个用于mtcars。
构建数据
mtc <- mtcars
mtc$id <- 1:nrow(mtc)
lm=with(mtc,lm(mpg~wt))
df=data.frame(fit=lm$coefficients[1]+mtcars$wt*lm$coefficients[2])
df$id <- 101:132
df$wt <- mtcars$wt
如上所示,mtc是带有mtcars数据的数据,df是线性模型数据。请注意,在df中我添加了一个id列,它的所有值都大于100,并且与mtc data.frame完全不同。
当您将鼠标悬停在点all_values
上时,将从mtc访问id列,只要您将鼠标悬停在该行all_values
上,就会从df访问id列。
我在下面的函数中添加了一行代码:
all_values <- function(x) {
#if the id is greater than 100 i.e. the df data.frame
#then return NULL
if(x$id>100) return(NULL)
if(is.null(x)) return(NULL)
row <- mtc[mtc$id == x$id, ]
paste0(names(row), ": ", format(row), collapse = "
")
}
然后绘制两个单独的data.frames。 add_tooltip
将为两个data.frames找到id变量:
ggvis(x=~wt) %>%
layer_points(data=mtc, y = ~mpg, key := ~id) %>%
layer_paths(data=df,y= ~fit, key := ~id) %>%
add_tooltip(all_values, "hover")
我无法显示与此图表的完全交互性,但您可以在下面的图片中看到,虽然我的光标位于该行上方但未显示任何信息。
而这些点在悬停时会显示信息。