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

时间:2017-05-22 22:06:08

标签: 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")),
                          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)))

我无法让滑块控制Date变量,它每天都会默认为默认值。我注意到它在文档中默认为每日,但我找不到一种解决方法来强制它使用非日常数据。

1 个答案:

答案 0 :(得分:1)

为了便于阅读,我们在外面创建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)