Plot ordered data values collected over time in one of two ways that correspond to how the values are labeled.

- Run Chart: Label the data values from 1 to the number of values ordered by their time of collection.
- Time Series Chart: Label the data values by the time and/or date each data value was collected.

Meaningful for sequentially ordered numerical data values such as by
time, plot a run chart of a single variable according to the parameter
`run`

. Analogous to a time series visualization, the run
chart plots the data values sequentially, but without dates or times. An
analysis of the runs is also provided.

Illustrate with the **lessR** *Employee*
data.

`<- Read("Employee") d `

```
##
## >>> Suggestions
## Details about your data, Enter: details() for d, or details(name)
##
## Data Types
## ------------------------------------------------------------
## character: Non-numeric data values
## integer: Numeric data values, integers only
## double: Numeric data values with decimal digits
## ------------------------------------------------------------
##
## Variable Missing Unique
## Name Type Values Values Values First and last values
## ------------------------------------------------------------------------------------------
## 1 Years integer 36 1 16 7 NA 7 ... 1 2 10
## 2 Gender character 37 0 2 M M W ... W W M
## 3 Dept character 36 1 5 ADMN SALE FINC ... MKTG SALE FINC
## 4 Salary double 37 0 37 53788.26 94494.58 ... 56508.32 57562.36
## 5 JobSat character 35 2 3 med low high ... high low high
## 6 Plan integer 37 0 3 1 1 2 ... 2 2 1
## 7 Pre integer 37 0 27 82 62 90 ... 83 59 80
## 8 Post integer 37 0 22 92 74 86 ... 90 71 87
## ------------------------------------------------------------------------------------------
```

The data values for the variable *Salary* are not actually
collected over time, but for illustration, here create a run chart of
*Salary* as if the data were collected over time. The indices,
the sequence of integers from 1 to the last data value, are created by
`Plot()`

. Only the data values are specified. Invoke the
`run`

parameter to instruct `Plot()`

to plot the
data in sequential order as a run chart.

`Plot(Salary, run=TRUE)`

```
## >>> Suggestions
## Plot(Salary, run=TRUE, size=0) # just line segments, no points
## Plot(Salary, run=TRUE, lwd=0) # just points, no line segments
## Plot(Salary, run=TRUE, fill="on") # default color fill
##
## n miss mean sd min mdn max
## 37 0 73795.557 21799.533 46124.970 69547.600 134419.230
##
## ------------
## Run Analysis
## ------------
##
## Total number of runs: 21
## Total number of values that do not equal the median: 36
```

The default run chart displays the plotted points in a small size
with connecting line segments. Change the size of the points with the
parameter `size`

, here set to zero to remove the points
entirely. Fill the area under the line segments with the parameter
`area_fill`

, here set to the default `on`

but can
express any color. Remove the center line with the parameter
`center_line`

set to `off`

.

`Plot(Salary, run=TRUE, size=0, area_fill="on", center_line="off")`

```
## >>> Suggestions
## Plot(Salary, size=0, run=TRUE, area_fill="on", center_line="off", lwd=0, fill="on") # just area
##
## n miss mean sd min mdn max
## 37 0 73795.557 21799.533 46124.970 69547.600 134419.230
##
## ------------
## Run Analysis
## ------------
##
## Total number of runs: 21
## Total number of values that do not equal the median: 36
```

`Plot()`

can plot a time series from three different forms
of the data:

- long-form
- wide-form
- time-series object

`Plot()`

can also similarly plot a run chart in which it
generates the index values sequentially ordered. A time series requires
two variables, the time/date and each corresponding measured value to be
plotted.

Plotting a variable of type Date as the x-variable in a scatterplot
automatically creates a time series visualization. Plot() draws the
connecting line segments, without the points at each time period
(size=0). To add the area fill, for **lessR** set the area
parameter to `TRUE`

for the default color from the current
color theme. Or, set to a specific color.

Read time series data of stock *Price* for three companies:
Apple, IBM, and Intel. The data table is in long form, part of
**lessR**.

`<- Read("StockPrice") d `

```
##
## >>> Suggestions
## Details about your data, Enter: details() for d, or details(name)
##
## Data Types
## ------------------------------------------------------------
## character: Non-numeric data values
## Date: Date with year, month and day
## double: Numeric data values with decimal digits
## ------------------------------------------------------------
##
## Variable Missing Unique
## Name Type Values Values Values First and last values
## ------------------------------------------------------------------------------------------
## 1 date Date 1335 0 445 1985-01-01 ... 2022-01-01
## 2 Company character 1335 0 3 Apple Apple Apple ... HP HP HP
## 3 Price double 1335 0 1324 0.1013 0.0865 ... 37.415 38.02
## ------------------------------------------------------------------------------------------
```

`1:5,] d[`

```
## date Company Price
## 1 1985-01-01 Apple 0.1013
## 2 1985-02-01 Apple 0.0865
## 3 1985-03-01 Apple 0.0773
## 4 1985-04-01 Apple 0.0742
## 5 1985-05-01 Apple 0.0607
```

Activate a time series plot by setting the \(x\)-variable to a variable of R type
`Date`

, which is true of the variable *date* in this
data set. Can also plot a time series by passing a time series object,
created with the base R function `ts()`

as the variable to
plot.

Here plot just for *Apple*, with the two variables
*date* and *Price*, stock price. The parameter
`rows`

specifies what rows of the input data frame to retain
for the analysis.

`Plot(date, Price, rows=(Company=="Apple"))`

```
## >>> Suggestions
## Plot(date, Price, enhance=TRUE) # many options
## Plot(date, Price, fill="skyblue") # interior fill color of points
## Plot(date, Price, fit="lm", fit_se=c(.90,.99)) # fit line, stnd errors
## Plot(date, Price, MD_cut=6) # label Mahalanobis dist > 6 as outliers
##
## >>> Pearson's product-moment correlation
##
## Number of paired values with neither missing, n = 445
## Sample Correlation of date and Price: r = 0.652
##
## Hypothesis Test of 0 Correlation: t = 18.113, df = 443, p-value = 0.000
## 95% Confidence Interval for Correlation: 0.595 to 0.703
```

Here, add the default fill color by setting the
`area_fill`

parameter to `"on"`

. Can also specify
a custom color.

`Plot(date, Price, rows=(Company=="Apple"), area_fill="on")`

```
## >>> Suggestions
## Plot(date, Price, enhance=TRUE) # many options
## Plot(date, Price, fit="lm", fit_se=c(.90,.99)) # fit line, stnd errors
## Plot(date, Price, out_cut=.10) # label top 10% from center as outliers
##
## >>> Pearson's product-moment correlation
##
## Number of paired values with neither missing, n = 445
## Sample Correlation of date and Price: r = 0.652
##
## Hypothesis Test of 0 Correlation: t = 18.113, df = 443, p-value = 0.000
## 95% Confidence Interval for Correlation: 0.595 to 0.703
```

With the `by`

parameter, plot all three companies on the
same panel.

`Plot(date, Price, by=Company)`

```
## >>> Suggestions
## Plot(date, Price, enhance=TRUE) # many options
## Plot(date, Price, fill="skyblue") # interior fill color of points
## Plot(date, Price, fit="lm", fit_se=c(.90,.99)) # fit line, stnd errors
## Plot(date, Price, MD_cut=6) # label Mahalanobis dist > 6 as outliers
```

Stack the plots by setting the parameter `stack`

to
`TRUE`

.

`Plot(date, Price, by=Company, stack=TRUE)`

```
## >>> Suggestions
## Plot(date, Price, enhance=TRUE) # many options
## Plot(date, Price, fill="skyblue") # interior fill color of points
## Plot(date, Price, fit="lm", fit_se=c(.90,.99)) # fit line, stnd errors
## Plot(date, Price, out_cut=.10) # label top 10% from center as outliers
```

With the `by1`

parameter, plot all three companies on the
different panels, a Trellis plot.

`Plot(date, Price, by1=Company)`

`## [Trellis graphics from Deepayan Sarkar's lattice package]`

Do the Trellis plot with some color. Learn more about customizing
visualizations in the vignette `utlities`

.

```
style(sub_theme="black", window_fill="gray10")
Plot(date, Price, by1=Company, n_col=1, fill="darkred", color="red", trans=.55)
```

`## [Trellis graphics from Deepayan Sarkar's lattice package]`

Return to the default style, then turn off text output for subsequent analyses.

`style()`

`## theme set to "colors"`

`style(quiet=TRUE)`

Set a baseline of 25 with the `area_origin`

parameter for
a Trellis plot, with default fill color.

`Plot(date, Price, by1=Company, xlab="", area_fill="on", area_origin=25)`

Change the aspect ratio with the `aspect`

parameter
defined as height divided by width.

`Plot(date, Price, by1=Company, aspect=.5, area_fill="slategray3")`

Stack the three time series, fill under each curve with a version of
the **lessR** sequential range `"emeralds"`

.

`Plot(date, Price, by=Company, trans=0.4, stack=TRUE, area_fill="emeralds")`

`Plot()`

also reads wide-format data. We have no available
wide form time data with **lessR**, so first convert the
long form as read to the wide form. In the wide form, the three
companies each have their own column of data, repeated for each date.
Use the **lessR** function `reshape_wide()`

to
do the conversion.

```
<- reshape_wide(d, group="Company", response="Price", ID="date")
dw head(dw)
```

```
## date Apple IBM HP
## 1 1985-01-01 0.1013 13.0282 0.9532
## 2 1985-02-01 0.0865 12.8013 0.9405
## 3 1985-03-01 0.0773 12.2312 0.8643
## 4 1985-04-01 0.0742 12.1830 0.8084
## 5 1985-05-01 0.0607 12.3876 0.8466
## 6 1985-06-01 0.0629 12.0236 0.8911
```

Now the analysis, which repeats a previous analysis, but with
wide-form data. Because the data frame is not the default *d*,
explicitly indicate with the `data`

parameter.

`Plot(date, c(HP, Apple, IBM), area_fill="blues", stack=TRUE, trans=.4, data=dw)`

Can also plot directly from an R time series object, created with the
base R `ts()`

function.

```
<- ts(dw$Apple, frequency=12, start=c(1980, 12))
a1.ts Plot(a1.ts)
```

With `style()`

many themes can be selected, such as
`"lightbronze"`

, `"dodgerblue"`

,
`"darkred"`

, and `"gray"`

for gray scale. When no
`theme`

or any other parameter value is specified, return to
the default theme, `colors`

.

`style()`

The annotations in the following visualization consist of the text
field “iPhone” with an arrowhead that points to the time that the first
iPhone became available. With **lessR**, list each
component of the annotation as a vector for add. Any value listed that
is not a keyword such as “rect” or “arrow” is interpreted as a text
field. Then, in order of their occurrence in the vector for add, list
the needed coordinates for the objects. To place the text field “iPhone”
requires one coordinate, `<x1,y1>`

. To place an “arrow”
requires two coordinates, `<x1,y1>`

and
`<x2,y2>`

. For example, the second element of the
`y1`

vector is the `y1`

value for the “arrow”. The
text field does not require a second coordinate, so specify
`x2`

and `y2`

as single elements instead of
vectors.

```
<- as.Date("2007-06-01")
x Plot(date, Price, rows=(Company == "Apple"), fill="on",
add=c("iPhone", "arrow"),
x1=c(x,x), y1=c(100,90), x2=x, y2=30)
```

Use the base R `help()`

function to view the full manual
for `Plot()`

. Simply enter a question mark followed by the
name of the function.

`?Plot`

More on Scatterplots, Time Series plots, and other visualizations
from **lessR** and other packages such as
**ggplot2** at:

Gerbing, D., *R Visualizations: Derive Meaning from Data*, CRC
Press, May, 2020, ISBN 978-1138599635.