繁体   English   中英

将数据添加到输入数据集中包含但不直接在vis中的ggvis工具提示

[英]Add data to ggvis tooltip that's contained in the input dataset but not directly in the vis

这是我的输入数据集:

> names(breakingbad.episodes)
[1] "season"           "episode"          "epnum"            "epid"             "title"           
[6] "url.trakt"        "firstaired.utc"   "id.tvdb"          "rating"           "votes"           
[11] "loved"            "hated"            "overview"         "firstaired.posix" "year"            
[16] "zrating.season"   "src"     

对于我的ggvis ,我使用以下变量firstaired.posixrating

> str(breakingbad.episodes[c("firstaired.posix", "rating")])
'data.frame':   62 obs. of  2 variables:
$ firstaired.posix: POSIXct, format: "2008-01-21 02:00:00" "2008-01-28 02:00:00" "2008-02-  11 02:00:00" ...
$ rating          : num  87 85 84 84 83 90 87 85 88 83 ...

我用一个包含rating信息的工具提示成功创建了我的ggvis ,如下所示:

> breakingbad.episodes %>% 
ggvis(x = ~firstaired.posix, 
    y = ~rating, 
    fill = ~season) %>% 
layer_points() %>%
add_axis("x", title = "Airdate") %>%
add_axis("y", title = "Rating") %>%
add_legend("fill", title = "Season") %>%
add_tooltip(function(data){paste0("Rating: ", data$rating)}, "hover")

但我实际上希望工具提示包含更多数据,比如epid变量,所以我试过:

…
add_tooltip(function(data){paste0("Rating: ", data$rating, "\n", "Epid: ", as.character(data$epid))}, "hover")

...使用as.character()因为epid是一个有序因子 - 但工具提示的部分是空的。 (我也注意到了换行符我打算\\n插入缺失,但是这是一个不同的问题)。

看起来这个问题的原因是通过将我的数据集管道到ggvis创建的vis对象不包含我想要显示的信息,至少这就是我通过查看第一个示例中str()的输出而收集的原因。

编辑:我解决了这个换行问题,所以没有必要指向我?add_tooltip - 完全忘了这一点。

编辑:接受的答案工作正常,即使它不允许我在工具提示中放置任意变量,它几乎是我的用例需要的,谢谢! 这是我最后做的事情:

breakingbad.episodes <- transform(breakingbad.episodes, id = paste0(epid, " - ", title))

breakingbad.episodes %>% 
  ggvis(x = ~firstaired.posix, 
      y = ~rating, 
      fill = ~season, 
      key := ~id) %>% 
  layer_points() %>%
  add_axis("x", title = "Airdate") %>%
  add_axis("y", title = "Rating") %>%
  add_legend("fill", title = "Season") %>%
  add_tooltip(all_values, "click")

是的,这是可能的。 通常,客户端仅发回实际在图中的数据列。 要获取其他列,您应该使用键来索引原始数据:这是一个简单的可重现示例

library(ggvis)
mtc <- mtcars
mtc$id <- 1:nrow(mtc)

all_values <- function(x) {
  if(is.null(x)) return(NULL)
  row <- mtc[mtc$id == x$id, ]
  paste0(names(row), ": ", format(row), collapse = "<br />")
}

mtc %>% ggvis(x = ~wt, y = ~mpg, key := ~id) %>%
  layer_points() %>%
  add_tooltip(all_values, "hover")

一种解决方法是在key属性中传递e​​pid变量,这通常意味着跟踪哪些观察在转换期间彼此对应但是它具有在数据中包括epid而没有产生任何副作用的期望效果:

breakingbad.episodes <- data.frame(firstaired.posix = as.POSIXct(c("2008-01-21 02:00:00", "2008-01-28 02:00:00")),
rating = c(87, 85), epid = as.factor(c(12,23)), season = as.factor(c(1,2)), somevar = c("special", "very_special"))

breakingbad.episodes %>% 
  ggvis(x = ~firstaired.posix, 
        y = ~rating, 
        fill = ~season, key := ~epid) %>% 
  layer_points() %>%
  add_axis("x", title = "Airdate") %>%
  add_axis("y", title = "Rating") %>%
  add_legend("fill", title = "Season") %>%
  add_tooltip(function(data){paste0("Rating: ", data$rating, "\n", "Epid: ", as.character(data$epid))}, "hover")

如果需要使用原始数据集中的多个变量,则可以为每行添加一个唯一值的id列,然后执行以下操作:

breakingbad.episodes <- data.frame(id = c(1,2), firstaired.posix = as.POSIXct(c("2008-01-21 02:00:00", "2008-01-28 02:00:00")),
rating = c(87, 85), epid = as.factor(c(12,23)), season = as.factor(c(1,2)), somevar = c("special", "very_special"))

breakingbad.episodes %>% 
  ggvis(x = ~firstaired.posix, 
        y = ~rating, 
        fill = ~season, key := ~id) %>% 
  layer_points() %>%
  add_axis("x", title = "Airdate") %>%
  add_axis("y", title = "Rating") %>%
  add_legend("fill", title = "Season") %>%
  add_tooltip(function(data){paste0("Rating: ", data$rating, "\n", "Epid: ",
as.character(breakingbad.episodes$epid[breakingbad.episodes$id == data$id]), "\n", 
"What this is: ", breakingbad.episodes$somevar[breakingbad.episodes$id == data$id])}, "hover")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM