我正在尝试使用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变量,它每天都会默认为默认值。我注意到它在文档中默认为每日,但我找不到一种解决方法来强制它使用非日常数据。
答案 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)