[英]Disappearing values in ggvis when using tooltip on grouped data
这很好
library(dplyr)
library(ggvis)
years <- as.factor(c(2013,2013,2014,2014,2015,2015))
months <- c(1,2,1,2,1,2)
values <- c(3,2,4,6,5,1)
df <- data.frame(years,months,values)
df %>%
group_by(years) %>%
ggvis(~months, ~values) %>%
layer_points( fill = ~years)
但是,当我添加工具提示时,所有点都会暂时显示,但仅保留2015年的值
df <- cbind(df, id = seq_len(nrow(df)))
all_values <- function(x) {
if(is.null(x)) return(NULL)
row <- df[df$id == x$id,]
paste0(names(row),": ",format(row), collapse = "<br />")
}
df %>%
group_by(years) %>%
ggvis(~months, ~values, key:= ~id) %>%
layer_points( fill = ~years) %>%
add_tooltip(all_values, "hover")
可能是一些简单的错误,但任何帮助都会使您欢呼
目前,在对数据进行分组时尝试添加特定于行的工具提示似乎无效。 实际上,这是有一定道理的,因为分组意味着您可能需要分组信息。
您根本不需要在layer_points
示例中进行分组,但是如果您希望在特定年份的点之间以及点之间使用线,则将需要分组。 如果这是您想要的,则在添加点后将数据集分组,然后将key
放入layer_points
而不是整个ggvis
。
df %>%
ggvis(~months, ~values) %>%
layer_points( fill = ~years, key:= ~id) %>%
add_tooltip(all_values, "hover") %>%
group_by(years) %>%
layer_lines(stroke = ~years, strokeWidth := 2)
这并不是完全理想的,因为即使行没有与之关联的唯一id数据,工具提示仍会显示在行中。 要更改此设置,请对您的工具提示函数进行少量更改,以检查id变量是否为NULL
而不是ggvis
的整个数据集。
all_values = function(x) {
if(is.null(x$id)) return(NULL)
row <- df[df$id == x$id,]
paste0(names(row),": ",format(row), collapse = "<br />")
}
您可以在组级别添加工具提示,但需要弄清楚要显示的摘要信息类型。 在工具提示的功能中,您将使用分组变量而不是id
。
例如,您可以仅显示与该组关联的所有值。 我设置方法,您需要单击该行以查看组信息:
group_values1 = function(x) {
if(is.null(x)) return(NULL)
group = df[df$years == unique(x$years),]
paste0(names(group), ": ", format(group), collapse = "<br />")
}
df %>%
ggvis(~months, ~values) %>%
layer_points( fill = ~years, key:= ~id) %>%
add_tooltip(all_values, "hover") %>%
group_by(years) %>%
layer_lines(stroke = ~years, strokeWidth := 2) %>%
add_tooltip(group_values1, "click")
您可能需要显示摘要信息。 在此示例中,我将显示values
的总体变化以及工具提示中经过了多少个月。 我使用dplyr中的函数制作摘要数据集。
group_values2 = function(x) {
if(is.null(x)) return(NULL)
group = df[df$years == unique(x$years),]
groupval = group %>% group_by(years) %>%
summarise(`Change in value` = max(values) - min(values),
`Months Passed` = max(months) - min(months))
paste0(names(groupval), ": ", format(groupval), collapse = "<br />")
}
df %>%
ggvis(~months, ~values) %>%
layer_points( fill = ~years, key:= ~id) %>%
add_tooltip(all_values, "hover") %>%
group_by(years) %>%
layer_lines(stroke = ~years, strokeWidth := 2) %>%
add_tooltip(group_values2, "click")
问题在于您将group_by
放在ggvis之前,然后再调用add_tooltip
。 只需在ggvis调用后放置group_by
部分
df %>%
ggvis(~months, ~values, key:= ~id) %>%
group_by(years) %>%
layer_points( fill = ~years) %>%
add_tooltip(all_values, "hover")
不知道为什么会这样
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.