R、 在Shiny和ggvis中绘制日期时出现问题
我对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:
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)