R ggplot2 Error: Aesthetics must be either length 1 or the same as the data
In this tutorial you’ll learn how to fix the error message “Aesthetics must be either length 1 or the same as the data” in the R programming language.
Table of contents:
Let’s start right away…
Example Data, Add-On Packages & Default Graph
As a first step, we’ll need to create some data that we can use in the examples later on:
data <- data.frame(x = LETTERS[1:5], # Create example data y = 1:5) data # Print example data # x y # 1 A 1 # 2 B 2 # 3 C 3 # 4 D 4 # 5 E 5 |
data <- data.frame(x = LETTERS[1:5], # Create example data y = 1:5) data # Print example data # x y # 1 A 1 # 2 B 2 # 3 C 3 # 4 D 4 # 5 E 5
In case we want to draw our data with the ggplot2 package, we also have to install and load ggplot2 to R:
install.packages("ggplot2") # Install & load ggplot2 package library("ggplot2") |
install.packages("ggplot2") # Install & load ggplot2 package library("ggplot2")
Example 1: Reproducing the Error: Aesthetics must be either length 1 or the same as the data
In Example 1, I’ll show how to replicate the error message “Aesthetics must be either length 1 or the same as the data” in R.
Have a look at the following R code:
ggplot(data, aes(x, y, fill = c("red", "blue"))) + # Try to draw ggplot2 plot geom_bar(stat = "identity") # Error: Aesthetics must be either length 1 or the same as the data (5): fill |
ggplot(data, aes(x, y, fill = c("red", "blue"))) + # Try to draw ggplot2 plot geom_bar(stat = "identity") # Error: Aesthetics must be either length 1 or the same as the data (5): fill
As you can see, the RStudio console returns the error “”Aesthetics must be either length 1 or the same as the data”.
The reason for this is that we have specified the fill argument within the aes function to be equal a vector of length 2 (i.e. c(“red”, “blue”)).
However, our example data has five categories and therefore doesn’t know which filling color should be used for which category.
Let’s solve this problem!
Example 2: Fixing the Error: Aesthetics must be either length 1 or the same as the data
This example shows how to deal with the ggplot2 error “Aesthetics must be either length 1 or the same as the data”.
As discussed before, we have to specify a filling color for each group in our data. The easiest way to do this is that we set fill to be equal to our grouping variable (i.e. x):
ggplot(data, aes(x, y, fill = x)) + # Properly drawing ggplot2 plot geom_bar(stat = "identity") |
ggplot(data, aes(x, y, fill = x)) + # Properly drawing ggplot2 plot geom_bar(stat = "identity")

As illustrated in Figure 1, the previous syntax created a ggplot2 barplot in R. Looks good!
Video & Further Resources
I have recently released a video on my YouTube channel, which shows the R programming syntax of this tutorial. Please find the video below:
Please accept YouTube cookies to play this video. By accepting you will be accessing content from YouTube, a service provided by an external third party.
![]()
If you accept this notice, your choice will be saved and the page will refresh.
Furthermore, I can recommend to have a look at the other articles of my homepage.
- ggplot2 Error: stat_count() must not be used with a y aesthetic
- Error – Undefined Columns Selected when Subsetting Data Frame
- Dealing with Warnings & Errors in R (Cheat Sheet)
- R Programming Language
Summary: You learned in this article how to handle the error “Aesthetics must be either length 1 or the same as the data” in R programming. In case you have any further questions, let me know in the comments.







6 Comments. Leave new
Hi,
I was trying to do the following code, and it hasn’t worked out.
Could you please help me know, where I went wrong:
I have picked the inbuilt set mpg and also run the suitable packages.
I get the error: Error: Aesthetics must be either length 1 or the same as the data (234): x, y and fill
set.seed(10)
names<-c(rep("A",20),
rep("B",5),
rep("C",30),
rep("D",100))
value<- c(sample(2:5, 20, replace=T),
sample(4:10, 5, replace=T),
sample(1:7, 30, replace=T),
sample(3:8, 100 ,replace=T))
data1<-data.frame(names,value)
data1
ggplot(data=mpg,(aes(x=names,y=value,fill=names))) +
geom_boxplot( stat="identity")
Thanks and kind regards,
Ananya
Hey Ananya,
Your code works for me when I do the following changes:
My final code looks like this:
And the resulting plot looks like this:
Regards,
Joachim
CHD <- rawdata$anychd
CHD2 <- as.character(CHD)
prev_CHD <- factor(CHD2, levels = c(0,1), labels = c("NO", "YES"))
age <- rawdata$AGE
ggplot(rawdata, aes(x=prev_CHD, y=age, coll = prev_CHD)) + geom_boxplot() + theme(legend.position = "none") + xlab("CHD Event") +ylab("Age (years)") + ggtitle("Relationship Between Age & Presence of CHD Event")
I also get the same error and was wondeirng why? Thanks!
Hey Charlotte,
You should store all the relevant information for the plot within a single data frame, not in separate data objects.
You may create a data frame containing prev_CHD and age and run the code again based on this data frame.
Regards,
Joachim
Hello,
I am just trying to generate a GSEA plot via plotEnrichment(). I did the following:
plotEnrichment(examplePathways[[“5991130_Programmed_Cell_Death”]],
exampleRanks) + labs(title=”Programmed Cell Death”)
And I received this message:
Error in `check_aesthetics()`:
! Aesthetics must be either length 1 or the same as the data (1): x and xend
Run `rlang::last_error()` to see where the error occurred.
I am not sure how to resolve this. Please help. Thanks
Hey Mike,
I’m sorry for the delayed response, I’ve been on vacation for the last couple of days. Do you still need help with this error message?
Regards,
Joachim