R、 在Shiny和ggvis中绘制日期时出现问题

R、 在Shiny和ggvis中绘制日期时出现问题,r,shiny,ggvis,posixct,R,Shiny,Ggvis,Posixct,我对Shiny和ggvis有点陌生,实际上这里有几个问题。首先,我有以下格式的数据: Event.Hour Count Group 1 2015-10-08 00:00:00 1476 All 2 2015-10-08 01:00:00 22186 All 3 2015-10-08 02:00:00 2958 All 4 2015-10-08 03:00:00 3484 All 5 2015-10-08 04:

我对Shiny和ggvis有点陌生,实际上这里有几个问题。首先,我有以下格式的数据:

            Event.Hour Count    Group
1  2015-10-08 00:00:00  1476      All
2  2015-10-08 01:00:00 22186      All
3  2015-10-08 02:00:00  2958      All
4  2015-10-08 03:00:00  3484      All
5  2015-10-08 04:00:00  4159      All
6  2015-10-08 05:00:00  2960      All
7  2015-10-08 00:00:00   222 Business
8  2015-10-08 01:00:00    26 Business
9  2015-10-08 02:00:00   542 Business
10 2015-10-08 03:00:00    26 Business
11 2015-10-08 04:00:00  4760 Business
12 2015-10-08 05:00:00  4640 Business
13 2015-10-08 00:00:00  1704   System
14 2015-10-08 01:00:00   100   System
15 2015-10-08 02:00:00   122   System
16 2015-10-08 03:00:00    10   System
17 2015-10-08 04:00:00  3339   System
18 2015-10-08 05:00:00  5370   System
使用lubridate的dmy_hms功能创建日期:

> class(viz_set$Event.Hour)
[1] "POSIXct" "POSIXt" 
重新创建数据集的代码:

library(ggvis)
library(dplyr)
library(lubridate)

zz<- "Event.Hour Count    Group
1  2015-10-08-00:00:00  1476      All
2  2015-10-08-01:00:00 22186      All
3  2015-10-08-02:00:00  2958      All
4  2015-10-08-03:00:00  3484      All
5  2015-10-08-04:00:00  4159      All
6  2015-10-08-05:00:00  2960      All
7  2015-10-08-00:00:00   222 Business
8  2015-10-08-01:00:00    26 Business
9  2015-10-08-02:00:00   542 Business
10 2015-10-08-03:00:00    26 Business
11 2015-10-08-04:00:00  4760 Business  
12 2015-10-08-05:00:00  4640 Business
13 2015-10-08-00:00:00  1704   System
14 2015-10-08-01:00:00   100   System
15 2015-10-08-02:00:00   122   System
16 2015-10-08-03:00:00    10   System
17 2015-10-08-04:00:00  3339   System
18 2015-10-08-05:00:00  5370   System"

viz_set<-read.table(text=zz, header = T)

viz_set$Event.Hour <- ymd_hms(viz_set$Event.Hour)

无济于事

我还尝试添加一个以日期为字符串的新列,并在该列上使用了工具提示。两者都不起作用

其次,在生成的ggvis图中,X轴日期时间与值不一致。数据似乎在开始和结束前几个小时应:

第一个数据点应该从08年10月的线路开始,到14号星期三下午2点结束


有什么想法吗?

看来时区可能导致轴移动。一个简单的解决方法是将
ymd_dms
中的时区设置为系统的时区。从那以后,对我来说一切都很合理

(mytz = Sys.timezone())
[1] "America/Los_Angeles"

viz_set$Event.Hour = ymd_hms(viz_set$Event.Hour, tz = mytz)
就工具提示而言,以毫秒为单位的时间问题的解决办法是只显示原始数据集的数据,而不是通过
ggvis
显示的数据集。您可以使用
键执行此操作。这涉及到创建一个id变量,该变量唯一地表示原始数据集中的每一行

viz_set$id = 1:nrow(viz_set)
viz_set %>%
    ggvis(~Event.Hour, ~Count, stroke = ~Group) %>% 
    filter(Group %in% eval(input_checkboxgroup(c("All", "Business", "System"), select = "All"))) %>%
    layer_lines(strokeWidth := 2) %>%
    scale_datetime(property = "x", nice = "hour") %>%
    layer_points(opacity := 0, fill = ~Group, key := ~id) %>%
    add_tooltip(getData2, on = "click") %>%
    add_axis("x", subdivide = 5, tick_size_major=10, tick_size_minor = 5, title = "Event.Hour", title_offset = 30) %>%
    add_axis("y", title = "Count", title_offset = 60)
现在,工具提示功能可以如下所示

getData2 = function(dat){
    if(is.null(dat$id)) return(NULL)
    row = viz_set[viz_set$id == dat$id, ]
    paste(paste("Value:", row$Count, "<br />"),
         paste("Time:", as.character(row$Event.Hour)))
} 

看一看,你就更有可能得到帮助。你能通过
dput
给出你的示例数据,以便阅读吗?上面的评论链接显示了一个很好的例子。您可以使用点图层中的
解决第一个问题,并在
添加工具提示
帮助页面中的最后一个示例中创建工具提示功能。然后,您可以使用放入数据集中的日期时间变量的字符版本。这是ggvis github存储库中的一个与您的工具提示/日期时间问题相关的示例。@alexwhan谢谢Alex!我添加了一些代码来重新创建数据集,所以现在一切都应该很容易再现。
viz_set$id = 1:nrow(viz_set)
getData2 = function(dat){
    if(is.null(dat$id)) return(NULL)
    row = viz_set[viz_set$id == dat$id, ]
    paste(paste("Value:", row$Count, "<br />"),
         paste("Time:", as.character(row$Event.Hour)))
} 
viz_set %>%
    ggvis(~Event.Hour, ~Count, stroke = ~Group) %>% 
    filter(Group %in% eval(input_checkboxgroup(c("All", "Business", "System"), select = "All"))) %>%
    layer_lines(strokeWidth := 2) %>%
    scale_datetime(property = "x", nice = "hour") %>%
    layer_points(opacity := 0, fill = ~Group, key := ~id) %>%
    add_tooltip(getData2, on = "click") %>%
    add_axis("x", subdivide = 5, tick_size_major=10, tick_size_minor = 5, title = "Event.Hour", title_offset = 30) %>%
    add_axis("y", title = "Count", title_offset = 60)