# Plotting Time Series Data

## The ts_plot function

The plotting of time series object is most likely one of the steps of the analysis of time-series data. The \code{ is a customized function for plotting time series data based on the plotly package visualization engine. It supports the following time-series classes:

- ts
- mts
- zoo
- xts
- data.frame1
- tbl1

1 Must have a `Date` or `POSIXct/lt` column and at least on numeric column

For example let’s load and plot the `USgas` series, a `ts` object:

    library(TSstudio)

    data(USgas)

    ts_info(USgas)
    #>  The USgas series is a ts object with 1 variable and 238 observations
    #>  Frequency: 12
    #>  Start time: 2000 1
    #>  End time: 2019 10

    ts_plot(USgas)

## Customization options

It is straightforward to customize the plot using the different arguments of the ts_plot function

### Adding titles

By default, the function sets the series name as the plot title. The `title` allows you to modify the plot title and the `Xtitle` and `Ytitle` enable you to add titles to the X-axis and Y-axis respectively:

    ts_plot(USgas,
            title = "US Monthly Natural Gas Consumption",
            Xtitle = "Time",
            Ytitle = "Billion Cubic Feet")

### Adding slider

The `slider` argument allows you to add a slider on the bottom of the plot, which will enable you to customize the window length of the plot:

    ts_plot(USgas,
            title = "US Monthly Natural Gas Consumption",
            Xtitle = "Time",
            Ytitle = "Billion Cubic Feet",
            slider = TRUE)

### Customize the line

The `color`, `width` arguments allow you to customize the line’s color and width of the plot:

    ts_plot(USgas,
            title = "US Monthly Natural Gas Consumption",
            Xtitle = "Time",
            Ytitle = "Billion Cubic Feet",
            color = "black",
            width = 3)

The `dash` argument enables to create a dashed or dotted line (as opposed to the default setting of a solid line):

    ts_plot(USgas,
            title = "US Monthly Natural Gas Consumption",
            Xtitle = "Time",
            Ytitle = "Billion Cubic Feet",
            dash = "dash")

The `line.mode` enables to add to the solid line markers (by setting it to `lines+markers`) or just replace the solid one with markers (by setting it to `markers`):

    ts_plot(USgas,
            title = "US Monthly Natural Gas Consumption",
            Xtitle = "Time",
            Ytitle = "Billion Cubic Feet",
            line.mode =  "lines+markers")

## Advance customization

The `ts_plot` is a wraper of the plotly package plotting functions for time series objects, therefore, the output of the `ts_plot` is a `plotly` object:

    class(ts_plot(USgas))
    #> [1] "plotly"     "htmlwidget"

Advance customization of the `ts_plot` output can be done with plotly’s `layout` function. For example, let’s replot the `USgas` series and customize the background to black:

    library(plotly)

    ts_plot(USgas,
            title = "US Monthly Natural Gas Consumption",
            Xtitle = "Time",
            Ytitle = "Billion Cubic Feet",
            color =  "pink",
            Xgrid = TRUE,
            Ygrid = TRUE) %>%
      layout(paper_bgcolor = "black",
             plot_bgcolor = "black",
             font = list(color = "white"),
             yaxis = list(linecolor = "#6b6b6b",
                          zerolinecolor = "#6b6b6b",
                          gridcolor= "#444444"),
             xaxis = list(linecolor = "#6b6b6b",
                          zerolinecolor = "#6b6b6b",
                          gridcolor= "#444444"))

Note that the `Xgrid` and `Ygrid` arguments, when set to `TRUE`, add the corresponding X and Y grid lines.

### Plotting multiple time series object

The plotting of a multiple time series object is straightforward. Let’s load the `Coffee_Prices` an `mts` object that represents the monthly prices of the Robusta and Arabica coffee prices (USD per Kg.):

    data("Coffee_Prices")

    ts_info(Coffee_Prices)
    #>  The Coffee_Prices series is a mts object with 2 variables and 701 observations
    #>  Frequency: 12
    #>  Start time: 1960 1
    #>  End time: 2018 5

    ts_plot(Coffee_Prices)

By default, the function will plot all the series in one plot. Plotting the different series on a separate plot can be done by setting the `type` argument to `multiple`:

    ts_plot(Coffee_Prices,
            type = "multiple")

Note that the `color`, `Ytitle`, and `Xtitle` arguments are not applicable when plotting multiple time series object.

## Working with other time series class

Working with other types of time series classes following the execute same process as the one demonstrated with the ts object above.

The main advantage of plotting time series objects such as `xts`, `zoo`, `data.frame` and now `tsibble`, is that their index is more readable (e.g., support Date and other time classes).

### Plotting zoo and xts objects

Let’s load the University of Michigan consumer sentiment index:

    data("Michigan_CS")

    ts_info(Michigan_CS)
    #>  The Michigan_CS series is a xts object with 1 variable and 480 observations
    #>  Frequency: monthly
    #>  Start time: Jan 1980
    #>  End time: Dec 2019

    ts_plot(Michigan_CS)

### Plotting data.frame object

Plotting `data.frame` or `tbl` objects must follow the following structure:

- Have a `Date` or `POSIXct/lt` column
- At least one numeric column

For example, let’s convert the USgas series to `data.frame` with the `ts_to_prophet` function:

    USgas_df <- ts_to_prophet(USgas)

    str(USgas_df)
    #> 'data.frame':    238 obs. of  2 variables:
    #>  $ ds: Date, format: "2000-01-01" "2000-02-01" ...
    #>  $ y : num  2510 2331 2051 1783 1633 ...

    ts_plot(USgas_df)