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

R ggvis日期滑块,用于交互式图形,r,data-visualization,ggvis,R,Data Visualization,Ggvis,我正在尝试用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"))

我正在尝试用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)))
零售%
ggvis(~Date,~value)%>%
图层线(输入滑块(最小值(u$日期),最大值(u$日期),值=最小值(u$日期)))

我无法让滑块控制日期变量,它一直默认为daily。我注意到它在文档中默认为daily,但我找不到一个解决方法来强制它处理非日常数据。

为了可读性,让我们在外部创建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") )
编辑:删除以下前后的空白:

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)
dateSlider2%
ggvis(~Date,~value)%>%
层线()%>%
scale_datetime(“x”,nice=“month”,expand=0,domain=dateSlider2,
钳制=真,覆盖=真)

这很完美,但您知道为什么图表默认为我的最早数据点之前的日期吗?(在本例中,最左边的x轴不是从2007年开始的,因此滑块具有误导性)。您是指第一个数据点之前的空白区域吗?这可以通过
nice
expand
控制。请看我的编辑。再次感谢你,这非常有效。我现在遇到了一个问题,当我删除最新数据时,我的系列的最后一个数据点“粘”在绘图的右侧。既然我的问题得到了回答,我接受了,但是如果你知道解决这个问题的任何方法,那就太好了!
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)