Select Page

How to Solve R Error geom_path: each group consists of only one observation

by | Programming, R, Tips

This error occurs when you try to create a line plot using ggplot2 but the x-variable is non-numeric, for example, factor or character.

You can solve this error by using `group=1` as an argument in the `ggplot()` function call, otherwise, you can coerce your x-variable to numeric using `as.numeric()`.

This tutorial will go through how to solve the error with code examples.

Example

Consider the following data frame that contains information about the water level of a pond in centimetres.

```df <- data.frame(year=c("1999", "2001", "2003", "2005", "2007", "2009", "2011"),
water_level=c(100, 104, 99, 98, 100, 104, 110))

df```
``` year water_level
1 1999         100
2 2001         104
3 2003          99
4 2005          98
5 2007         100
6 2009         104
7 2011         110```

We will attempt to create a line plot using ggplot2 to show how the water level of the pond fluctuates between 1999 and 2011 in two-year intervals.

```library(ggplot2)

ggplot(df, aes(year, water_level)) +
geom_point() +
geom_line() +
ggtitle("Pond water level in centimetres between 1999-2011") +
theme(plot.title = element_text(size = 8, face = "bold"))```

Let’s run the code to see what happens:

```geom_path: Each group consists of only one
observation. Do you need to adjust the group
aesthetic?```

We get a scatter plot and a geom_path error message because a line plot requires a numeric x-variable in order to join the points to form a line.

We provided a character type x-variable, which we can verify using `class()`:

`class(df\$year)`
`[1] "character"`

Solution #1

We can solve this error by passing `group=1` as an argument to the `aes()` function.

For line graphs, we must group the data points so that R knows which points to connect. In this example, we want to connect all points, therefore group must equal 1.

Let’s look at the revised code

```library(ggplot2)

ggplot(df, aes(year, water_level, group=1)) +
geom_point() +
geom_line() +
ggtitle("Pond water level in centimetres between 1999-2011") +
theme(plot.title = element_text(size = 8, face = "bold"))```

Let’s run the code to get the result:

We successfully plotted the water level of the pond between 1999 and 2011.

Solution #2

The second way we can solve this error is to use a `numeric` x-variable instead of `character`. We can coerce the year values to `numeric` using `as.numeric()`. If the values are numeric we do not need to use `group=1`. Let’s look at the revised code:

```library(ggplot2)

df <- data.frame(year=as.numeric(c("1999", "2001", "2003", "2005", "2007", "2009", "2011")),
water_level=c(100, 104, 99, 98, 100, 104, 110))

ggplot(df, aes(as.numeric(year), water_level)) +
geom_point() +
geom_line() +
ggtitle("Pond water level in centimetres between 1999-2011") +
theme(plot.title = element_text(size = 8, face = "bold"))
```

Let’s run the code to get the result:

We successfully plotted the water level of the pond between 1999 and 2011.

Summary

Congratulations on reading to the end of this tutorial!

For further reading on errors with R, go to the article:

How to Solve R Error in stripchart.default(x1, …) : invalid plotting method

Go to the online courses page on R to learn more about coding in R for data science and machine learning.

Have fun and happy researching!