# How to Draw a plotly Line Plot in R (Example)

This article provides several examples of line plots using the plotly package in R.

Note: This article was created in collaboration with Kirby White. Kirby is an organizational effectiveness consultant and researcher, who is currently pursuing a Ph.D. at the Seattle Pacific University. You can read more about Kirby here!

## Overview

Line plots (or line charts; curve charts) are one of the most fundamental chart types.

They are typically used to represent changes over time or repeated measurement. Typically, values that are farther left on the plot are earlier in the time series, and values that are plotted higher on the graph have larger values.

At its simplest, a line plot is just a scatterplot that has a line drawn between each dot, so line plots will always have `type = "scatter"` in the plotly code.

## Example Data

To illustrate the primary features of line plots in plotly, weâ€™ll create two synthetic data sets. You may need to install and load the `tidyr` package to transform `df_wide` into `df_long`

```df_wide <- data.frame(date = c("2020-01-01", "2020-04-01", "2020-07-01", "2020-10-01"),
VarA = c(15,20,25,18),
VarB = c(22,24,26,28),
VarC = c(5,10,20,40))

df_long <- df_wide %>% tidyr::pivot_longer(cols = c(VarA, VarB,VarC))```

These data frames have identical information, but are structured differently in order to show examples that work in a variety of settings.

If you have not already done so, install and load the plotly package using this code: `install.packages("plotly")` and `library(plotly)`

## Creating a Line Plot

This code demonstrates how to plot the values of VarA over time:

```plot_ly(
data = df_wide,
x = ~date,
y = ~VarA,
type = "scatter",
mode = "lines"
)```

To add the other variables from the wide data set, we need to render multiple graphs and stack them on top of each other. Weâ€™ll also add the `name` argument so that legend properly labels them:

```plot_ly(
data = df_wide,
x = ~date,
y = ~VarA,
name = "VarA",
type = "scatter",
mode = "lines"
) %>%
add_trace(y = ~VarB, name = "VarB")%>%
add_trace(y = ~VarC, name = "VarC")```

The same graph is easier to create with the long data set, since we can simply map the color to the name column:

```plot_ly(
data = df_long,
x = ~date,
y = ~value,
color = ~name,
type = "scatter",
mode = "lines"
)```

Weâ€™ll mostly use `df_long` in this tutorial, since this data structure is easier to work with.

## Line and Marker Options

There are three modes for plotting this information:

• `mode = "lines"` plots the lines, but not the dots
• `mode = "lines+markers"` plots the lines and dots
• `mode = "markers"` plots the dots, but not the lines

Hereâ€™s an example for plotting the lines and markers together:

```plot_ly(
data = df_long,
x = ~date,
y = ~value,
color = ~name,
type = "scatter",
mode = "lines+markers"
)```

## Line Options

You can alter several properties of the lines that are being plotted. In plotly, these options are typically stored in a list and passed to the line argument in this format: `line = list(...)`

Here is an example to increase the width of the lines:

```plot_ly(
data = df_long,
x = ~date,
y = ~value,
color = ~name,
type = "scatter",
mode = "lines+markers",
line = list(width = 4)
)```

We can also make the lines dashed (or dotted):

```plot_ly(
data = df_long,
x = ~date,
y = ~value,
color = ~name,
type = "scatter",
mode = "lines+markers",
line = list(width = 4, dash = "dot")
)```

If you need each line to have different properties, the data structure of `df_wide` makes this easier. Here is an example where the properties are different for each line being plotted:

```plot_ly(
data = df_wide,
x = ~date,
y = ~VarA,
name = "VarA",
type = "scatter",
mode = "lines",
line = list(width = 2,
dash = "solid",
color = "green")) %>%
add_trace(y = ~VarB, name = "VarB", mode = "lines", line = list(width = 4, dash = "dash", color = "gray"))%>%
add_trace(y = ~VarC, name = "VarC", mode = "lines+markers", line = list(dash = "dot", color = "red"))```

## Unified Hover Info

When you have multiple lines plotted on the same graphic, it can sometimes be easier to compare all y-values at each value of x.

We can modify this by introducing the `layout` configurations in plotly, and setting `hovermode = "x unified"`:

```plot_ly(
data = df_long,
x = ~date,
y = ~value,
color = ~name,
type = "scatter",
mode = "lines+markers",
line = list(width = 4, dash = "dot")) %>%
layout(hovermode = "x unified")```

## Video, Further Resources & Summary

Check out this video for a tutorial of building these line plots in plotly:

You can check out these other articles for more detailed examples of these popular charts in plotly: