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?
Pond water level scatterplot ggplot2
Pond water level scatterplot

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:

Pond water level line-plot ggplot2
Pond water level line-plot

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:

Pond water level line-plot ggplot2 solution 2
Pond water level line-plot

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!

Research Scientist at Moogsoft | + posts

Suf is a research scientist at Moogsoft, specializing in Natural Language Processing and Complex Networks. Previously he was a Postdoctoral Research Fellow in Data Science working on adaptations of cutting-edge physics analysis techniques to data-intensive problems in industry. In another life, he was an experimental particle physicist working on the ATLAS Experiment of the Large Hadron Collider. His passion is to share his experience as an academic moving into industry while continuing to pursue research. Find out more about the creator of the Research Scientist Pod here and sign up to the mailing list here!