Управление текстом при использовании add_tooltip в ggvis - r

Я пытаюсь получить больше контроля над текстом, который появляется при использовании add_tooltip в ggvis,

Скажем, я хочу построить 'totalinns' против 'avg' для этого кадра данных. Цветовые точки по стране.

Текст, который я хочу отобразить во всплывающей подсказке: "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))

1 ответ

Решение

Я думаю, что это ближе

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>")
}
Другие вопросы по тегам