A connected scatter plot represents the relationship between two variables, generally through the time. You can create this type of chart in base R with the `plot`

function, setting `type = "b"`

.

```
# Data
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
# Connected scatter plot
plot(x, y, type = "b",
xlab = "Var 1", ylab = "Var 2")
```

**Symbol**

The symbol used by default when `type = "b"`

can be modified making use of the `pch`

argument.

```
# Data
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
plot(x, y,
type = "b", pch = 18,
xlab = "Var 1", ylab = "Var 2")
```

**Color and points**

You can change the color of the lines and points. However, the color of the points and the lines will be the same. You can override the points using the `points`

function.

```
# Data
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
# Custom points and color
plot(x, y, type = "b",
pch = 19, col = 4,
xlab = "Var 1", ylab = "Var 2")
points(x, y, pch = 19)
```

**Adding text**

You can label the points with the `text`

function. This can be useful, for instance, to label the date for each pair of observations. Note that we fine tuned the position of the labels for better readability.

```
# Data
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
labels <- 2013:2021
# Connected scatter plot with text
plot(x, y, type = "b",
xlim = c(1, 10), ylim = c(12, 23),
pch = 19, col = 4,
xlab = "Var 1", ylab = "Var 2")
text(x + 0.7, y + 0.4, labels)
```

**Connected scatter plot with arrows**

Other possibility is to use arrows to draw a path between the observations of the variables. For that purpose you can use the following function.

```
conArrows <- function(x, y, ...) {
plot(x, y, pch = "", ...)
invisible(sapply(1:length(x),
function(i) arrows(x[i], y[i],
x[i + 1], y[i + 1], ...)))
}
# Data
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
# Connected scatter plot with arrows
conArrows(x, y)
```

**Customization**

You can pass arguments to the function to customize the output, as shown in the example below.

```
conArrows <- function(x, y, ...) {
plot(x, y, pch = "", ...)
invisible(sapply(1:length(x),
function(i) arrows(x[i], y[i],
x[i + 1], y[i + 1], ...)))
}
# Data
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
# Connected scatter plot with arrows
conArrows(x, y, angle = 20, length = 0.15, col = 4)
```

See also