R ggvis日期滑块按月用于交互式图形

R ggvis date slider by month for interactive graph

我正在尝试使用 ggvis 制作交互式时间序列图表,滑块默认使用所有数据,但向右滑动时会按月剪切最旧的数据。数据是每月的,但我不知道如何让它发挥作用。考虑:

retail <- data.frame(Date = seq.Date(as.Date(parse_date_time("1/1/2007", "%m/%d/%y"))
                          , as.Date(parse_date_time("2/1/2017", "%m/%d/%y")),
                          by="month"),
                 Measure = rnorm(122))

u <- melt(retail, id="Date", measure = "Measure")

# Works for static graph
u %>%
  ggvis(~Date, ~value)

# Defaults to daily slider, no data displayed
u %>% 
  ggvis(~Date,~value) %>%
  layer_lines(input_slider(min(u$Date), max(u$Date), value=min(u$Date)))

我无法使用滑块来控制日期变量,它一直默认为每天。我注意到它在文档中默认为每日,但我找不到强制它使用非每日数据的解决方法。

为了便于阅读,让我们在外部创建 dataSlider:

library(lubridate) # for ceiling_date()

dateSlider <- input_slider(min=min(u$Date), max=max(u$Date), c(min(u$Date),
 max(u$Date)), map = function(x) ceiling_date(x, "month") )

map 会将您从输入滑块中任意选择的日期更改为该月的第一天。这个映射的 x 然后定义绘图范围。

u %>% 
 ggvis(~Date,~value) %>% 
  layer_lines() %>%
  scale_datetime("x", nice="month", domain = dateSlider, clamp = TRUE)

编辑:删除前后的空格:

dateSlider2 <- input_slider(min=min(u$Date), max=max(u$Date), c(min(u$Date),
 max(u$Date)), map = function(x) floor_date(x, "month") )

u %>% 
 ggvis(~Date,~value) %>% 
  layer_lines() %>%
  scale_datetime("x", nice="month", expand=0,  domain = dateSlider2, 
   clamp = TRUE, override=TRUE)