【问题标题】:Disappearing values in ggvis when using tooltip on grouped data对分组数据使用工具提示时,ggvis中的值消失
【发布时间】:2015-07-11 18:09:16
【问题描述】:

这很好用

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") 

可能是一些简单的错误,但感谢任何帮助 干杯

【问题讨论】:

  • 我看不到 group_by 在这里添加了什么 - 您可以通过在 layer_points 中使用 fill 来获得不同的组。如果删除 group_by 行,您的情节似乎可以按照您的意愿工作。

标签: r ggvis


【解决方案1】:

目前,尝试在数据分组时添加特定于行的工具提示似乎不起作用。实际上,这是有道理的,因为分组意味着您可能需要按组获取信息。

您根本不需要在 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")

【讨论】:

    【解决方案2】:

    问题在于您将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")
    

    不知道为什么会这样

    【讨论】:

    • @RlnatM Tx 提供建议,但当我使用您的代码时,它对情节没有影响
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多