首页 > 解决方案 > 在 R 中使用 timevis 创建嵌套子组

问题描述

我想使用's包创建一个像这样的时间线。我知道如何建立一个小组,就像他们在演示中所做的那样:Rtimevis

library(timevis)

dataGroups <- data.frame(
  id = 1:11,
  content = c(
    "Open",
    "Open",
    "Open",
    "Open",
    "Half price entry",
    "Staff meeting",
    "Open",
    "Adults only",
    "Open",
    "Hot tub closes",
    "Siesta"
  ),
  start = c(
    "2016-05-01 07:30:00",
    "2016-05-01 14:00:00",
    "2016-05-01 06:00:00",
    "2016-05-01 14:00:00",
    "2016-05-01 08:00:00",
    "2016-05-01 08:00:00",
    "2016-05-01 08:30:00",
    "2016-05-01 14:00:00",
    "2016-05-01 16:00:00",
    "2016-05-01 19:30:00",
    "2016-05-01 12:00:00"
  ),
  end   = c(
    "2016-05-01 12:00:00",
    "2016-05-01 20:00:00",
    "2016-05-01 12:00:00",
    "2016-05-01 22:00:00",
    "2016-05-01 10:00:00",
    "2016-05-01 08:30:00",
    "2016-05-01 12:00:00",
    "2016-05-01 16:00:00",
    "2016-05-01 20:00:00",
    NA,
    "2016-05-01 14:00:00"
  ),
  group = c(rep("lib", 2), rep("gym", 3), rep("pool", 5), NA),
  subgroup = c("A", "A", "B", "C", "C", "D", "D", "E", "E", "E", NA),
  type = c(rep("range", 9), "point", "background")
)

groups <- data.frame(id = c("lib", "gym", "pool"),
                     content = c("Library", "Gym", "Pool"))

timevis(
  data = dataGroups,
  groups = groups,
  options = list(editable = TRUE, stack = FALSE)
)

我不知道如何在最终时间线中包含子组。我相信有可能使用setGroups或包括一些使用htmlwidgets::JS(). 我正在使用第二个选项尝试文档中的示例,但它似乎不起作用:

timevis(
  data.frame(
    id = 1,
    content = "double click anywhere<br>in the timeline<br>to add an item",
    start = "2016-01-01"
  ),
  options = list(
    editable = TRUE,
    onAdd = htmlwidgets::JS(
      'function(item, callback) {
      item.content = "Hello!<br/>" + item.content;
      timevis 19
      callback(item);
      }'
    )
  )
)

任何包括子组的时间线示例都将不胜感激。

如果无法使用此功能,R是否有替代方案可用?

标签: rtimelinevis.jshtmlwidgets

解决方案


我想您可能将subGroupsnestedGroups混淆了。子组用于显示同一类别中不同级别的事件。如果您将subgroup属性更改为此:

subgroup = c("A", "A", "B", "C", "B", "D", "D", "F", "E", "F", NA)

您将能够看到(在下面的时间线中):

  • 图书馆的一个子组 ( A) (您注意到事件处于同一水平级别)
  • Gym的两个子组 ( B& C) (您注意到事件分布到两个水平级别)

  • Pool的三个子组 ( D, E, & F) (您注意到事件分布到三个水平级别)

带子组的 TimeVis

您提供的链接包含使用 Javascript 版本生成的时间线,该版本timvis支持在时间线中包含嵌套组。如果您打开该页面的源代码,您将能够看到它是如何实现的。

希望这可以帮助。


推荐阅读