A tsibble consists of index, key, and other measured
variables. The key identifies series/panels of interests, which often
remain the same during the exploration loop. Understanding multi-faceted
data requires an ensemble of graphics, and linked brushing via
key
will accelerate the exploratory data visualisation
process. The {tsibbletalk} package introduces shared key
to
the tsibble, to easily {crosstalk} between
plots on both client and server sides (i.e. with or without shiny).
You can install the development version of tsibbletalk from GitHub with:
# install.packages("remotes")
::install_github("earowang/tsibbletalk") remotes
The as_shared_tsibble()
turns a tsibble object to a
shared tsibble. If there’s any nesting/hierarchical structure in the key
variables, the spec
argument should be supplied for the
structural specification. For example, the structure in the
tourism
data contains the geographical hierarchy,
State
nesting (/
) lower-level
Region
s, and each location crossed (*
) with
the trip Purpose
. The plotly_key_tree()
visualises the tree structure specified in the spec
, which
is helpful in navigating interested series for later.
library(tsibble)
library(tsibbletalk)
<- tourism %>%
tourism_shared as_shared_tsibble(spec = (State / Region) * Purpose)
<- plotly_key_tree(tourism_shared, height = 900, width = 600) p0
Multiple displays are constructed: (1) the overall tree plot in the
left panel, (2) the time series plot in the top right, and (3) the
scatterplot representing featured metrics for each series, produced by
the features()
. All known functions here, but (yes)
generate linking views.
library(feasts)
<- tourism_shared %>%
tourism_feat features(Trips, feat_stl)
library(ggplot2)
<- tourism_shared %>%
p1 ggplot(aes(x = Quarter, y = Trips)) +
geom_line(aes(group = Region), alpha = 0.5) +
facet_wrap(~ Purpose, scales = "free_y")
<- tourism_feat %>%
p2 ggplot(aes(x = trend_strength, y = seasonal_strength_year)) +
geom_point(aes(group = Region))
library(plotly)
subplot(p0,
subplot(
ggplotly(p1, tooltip = "Region", width = 900),
ggplotly(p2, tooltip = "Region", width = 900),
nrows = 2),
widths = c(.4, .6)) %>%
highlight(dynamic = TRUE)
The key
carries nested and crossed embedding, and the
index
provides temporal information. Slicing and dicing
time index can help to build richer profiles for each series. A shiny
module, a pair of UI and server functions, is provided to interactively
slice and dice a tsibble. This allows to quickly locate an
interesting slice in time.
<- fill_gaps(pedestrian) %>%
p filter_index(~ "2015") %>%
ggplot(aes(x = Date_Time, y = Count, colour = Sensor)) +
geom_line(size = .2) +
facet_wrap(~ Sensor, scales = "free_y") +
theme(legend.position = "none")
library(shiny)
<- fluidPage(tsibbleWrapUI("tswrap"))
ui <- function(input, output, session) {
server tsibbleWrapServer("tswrap", p, period = "1 day")
}shinyApp(ui, server)