我正在使用Timevis包在R/Shiny中创建一个时间线。我想为单个项目设置特定的可编辑性选项。有些项目应该可以在组之间移动(但不能在时间上移动),有些项目应该根本不可编辑。我确实发现了前面的问题:Setting editable options in Timevis when using R/Shiny?,但它没有提到如何设置个别项目的选项。
在https://search.r-project.org/CRAN/refmans/timevis/html/timevis.html中,我发现底层的Javascript选项可以使用htmlwidgets::JS()命令来设置,使用这个命令我可以为整个时间轴设置选项,如下所示:
server <- function(input, output, session)
{
# render timeline
output$timeline <- renderTimevis({
tv <- timevis( data = timevisData, groups = timevisDataGroups, options=list(editable = htmlwidgets::JS("{updateGroup: true, updateTime: false }")))
})
timevisDataGroups <- data.frame(id=c("group 1", "group 2"),
content = c("Group 1", "Group 2")
)
timevisData <- data.frame(id = 1:2,
content = c("name 1", "name 2"),
start = c("2022-01-01", "2022-01-05"),
end = c("2022-01-03", "2022-01-06"),
group = c("group 1", "group 2"),
type = c("range", "range"))
}
但是,这并不允许我区分不同的项目,我试图设置个别项目的选项如下:
server <- function(input, output, session)
{
# render timeline
output$timeline <- renderTimevis({
tv <- timevis( data = timevisData, groups = timevisDataGroups, options=list(editable = TRUE))
})
timevisDataGroups <- data.frame(id=c("group 1", "group 2"),
content = c("Group 1", "Group 2")
)
timevisData <- data.frame(id = 1:2,
content = c("name 1", "name 2"),
start = c("2022-01-01", "2022-01-05"),
end = c("2022-01-03", "2022-01-06"),
group = c("group 1", "group 2"),
options = c(htmlwidgets::JS("editable: {updateGroup: true, updateTime: false }"), htmlwidgets::JS("editable: {updateGroup: false, updateTime: false }")),
type = c("range", "range"))
}
但是,特定于项目的选项似乎没有任何效果。
1条答案
按热度按时间nhaq1z211#
我也陷入了类似的问题,我发现
timevis
的addItem
函数是创建项目并将其添加到空timevis
对象的替代方法。从你的例子中得到启发:
使用
addItem
可以使用列表(而不是数据.frame)指定remove
、updateGroup
和updateTime
参数来创建项目(请参阅timeline
javascript文档:https://visjs.github.io/vis-timeline/docs/timeline/)使用我创建的item["start"] > as.Date("2022-01-04")
规则,应该可以将 name 1 从一个组移动到另一个组。注意:根据timeline R包文档,您应该可以在timevisData中添加一个名为“editable”的列来为每个条目指定editable(但不单独控制
remove
,updateGroup
和updateTime
的状态),但由于某种原因,它对我来说不起作用。