1

我试图更好地控制使用add_tooltipin时出现的文本ggvis

假设我想针对这个数据框的 'avg' 绘制 'totalinns' 。“国家”的色点。

我想出现在悬停工具提示中的文本是:'player', 'country', 'debutyear' 'avg'

tmp:
#          player totalruns totalinns totalno totalout       avg debutyear country
# 1   AG Ganteaume       112         1       0        1 112.00000      1948      WI
# 2     DG Bradman      6996        80      10       70  99.94286      1928     Aus
# 3       MN Nawaz        99         2       1        1  99.00000      2002      SL
# 4  VH Stollmeyer        96         1       0        1  96.00000      1939      WI
# 5       DM Lewis       259         5       2        3  86.33333      1971      WI
# 6     Abul Hasan       165         5       3        2  82.50000      2012     Ban
# 7     RE Redmond       163         2       0        2  81.50000      1973      NZ
# 8    BA Richards       508         7       0        7  72.57143      1970      SA
# 9         H Wood       204         4       1        3  68.00000      1888     Eng
# 10    JC Buttler       200         3       0        3  66.66667      2014     Eng

我知道我需要创建一个 key/id 变量,因为ggvis它只需要提供给它的信息。因此,我需要参考原始数据。我尝试在我的 paste0() 命令中更改我的文本,但仍然无法正确处理。

tmp$id <- 1:nrow(tmp)

all_values <- function(x) {
  if(is.null(x)) return(NULL)
  row <- tmp[tmp$id == x$id, ]
  paste0(tmp$player, tmp$country, tmp$debutyear, 
         tmp$avg, format(row), collapse = "<br />")
}

tmp %>% ggvis(x = ~totalinns, y = ~avg, key := ~id) %>%
  layer_points(fill = ~factor(country)) %>%
  add_tooltip(all_values, "hover")

找到下面的代码来重现示例:


tmp <- structure(list(player = c("AG Ganteaume", "DG Bradman", "MN Nawaz", 
"VH Stollmeyer", "DM Lewis", "Abul Hasan", "RE Redmond", "BA Richards", 
"H Wood", "JC Buttler"), totalruns = c(112L, 6996L, 99L, 96L, 
259L, 165L, 163L, 508L, 204L, 200L), totalinns = c(1L, 80L, 2L, 
1L, 5L, 5L, 2L, 7L, 4L, 3L), totalno = c(0L, 10L, 1L, 0L, 2L, 
3L, 0L, 0L, 1L, 0L), totalout = c(1L, 70L, 1L, 1L, 3L, 2L, 2L, 
7L, 3L, 3L), avg = c(112, 99.9428571428571, 99, 96, 86.3333333333333, 
82.5, 81.5, 72.5714285714286, 68, 66.6666666666667), debutyear = c(1948L, 
1928L, 2002L, 1939L, 1971L, 2012L, 1973L, 1970L, 1888L, 2014L
), country = c("WI", "Aus", "SL", "WI", "WI", "Ban", "NZ", "SA", 
"Eng", "Eng")), .Names = c("player", "totalruns", "totalinns", 
"totalno", "totalout", "avg", "debutyear", "country"), class = c("tbl_df", 
"data.frame"), row.names = c(NA, -10L))
4

1 回答 1

2

我认为这更接近:

all_values <- function(x) {
  if(is.null(x)) return(NULL)
  row <- tmp[tmp$id == x$id, ]
  paste(tmp$player[x$id], tmp$country[x$id], tmp$debutyear[x$id], 
         tmp$avg[x$id], sep="<br>")
}
于 2014-12-11T20:14:01.607 回答