Looking at your data, I see there are two years, 2018 and 2019 and only two of the habitats, Plateau and Hill_slope have more than three data points. The scatter plot seems to show fewer points than appear in the data set because many of the points have identical y values. For example, there are several points with Habitat = Plateau and Herd_size = 3 but they are all plotted on top of each other.
It would only make sense to compare the heard sizes vs. year for the two habitats that have more than three data points. I would do that like this. The plot clearly needs cosmetic adjustments but I think it conveys the idea.
library(ggplot2)
library(dplyr)
data <- read.csv("~/R/Play/Giraffe.csv", stringsAsFactors = FALSE)
Giraffes_summary2 <- filter(data, Habitat %in% c("Hill_slope", "Plateau")) %>%
group_by( Habitat, Year)
Giraffes_summary2 <- summarise(Giraffes_summary2, mean_Giraffe = mean(Herd_size),
sd_Giraffe = sd(Herd_size),
se_Giraffe = sd(Herd_size)/sqrt(n()))
ggplot(data = Giraffes_summary2,
mapping = aes(x = interaction(Habitat, Year), y = mean_Giraffe, fill = Habitat)) +
geom_col() +
geom_errorbar(aes(ymin = mean_Giraffe - sd_Giraffe,
ymax = mean_Giraffe + sd_Giraffe), width = 0.3)

Created on 2020-07-07 by the reprex package (v0.3.0)