You can set axis breaks to custom values with the breaks argument in scale_x_continuous and scale_y_continuous. Use the limits argument set axis ranges. If you don't want minor breaks (the gridlines with no axis labels that are marked in your example), then set minor_breaks=NULL:
library(ggplot2)
set.seed(2)
x<-rnorm(25)
y<-rnorm(25)
df<-data.frame(x,y)
ggplot(df,aes(x,y)) +
geom_point() +
scale_x_continuous(breaks=seq(-3,2,0.5))

ggplot(df,aes(x,y)) +
geom_point() +
scale_x_continuous(breaks=seq(-3,2,0.5), limits=c(-1,1))
#> Warning: Removed 11 rows containing missing values (geom_point).

ggplot(df,aes(x,y)) +
geom_point() +
scale_x_continuous(breaks=seq(-3,2,0.5),
minor_breaks=NULL)

Created on 2021-10-27 by the reprex package (v2.0.1)