As I mentioned in my comment, the issue is that your Annual...Change
column isn't a numeric but a character. For humans it's a percentage number but for R it's a character string made up of digits, a dot and a percent symbol.
To fix your issue convert your Annual...Change
column to a numeric which could e.g. easily be done with readr::parse_number
which will take care of the percent symbol.
Using some fake example data to mimic your real data:
# Create example data
change_in_oil_price <- data.frame(
Year = 1990:2020,
Annual...Change = paste0(seq(-70, 150, length.out = 31), "%")
)
Without converting to a numeric I run in the same issue as you, i.e. the numbers on the y axis get ordered alphabetically:
library(ggplot2)
library(readr)
ggplot(change_in_oil_price, aes(Year, Annual...Change, group = 1)) +
geom_point() +
geom_line() +
labs(x = "Year", y = "%change in Price",
title = "Annual Change in Brent Crude Price")

Converting to a numeric gives a nice plot instead with the numbers in the desired order. Additionally I make use of scale_y_continuous(labels = scales::label_percent(scale = 1))
to format the axis labels as percentages:
change_in_oil_price$Annual...Change <- readr::parse_number(change_in_oil_price$Annual...Change )
ggplot(change_in_oil_price, aes(Year, Annual...Change, group = 1)) +
geom_point() +
geom_line() +
scale_y_continuous(labels = scales::label_percent(scale = 1)) +
labs(x = "Year", y = "%change in Price",
title = "Annual Change in Brent Crude Price")
