t = seq(0, 0.45, 0.05)
d = c(0, 0.028, 0.055, 0.111, 0.202, 0.295, 0.435, 0.589, 0.771, 0.980)

This is for physics. t represents time and d represents displacement:

Time (s)

Displacement (m)

0.00

0.000

0.05

0.028

0.10

0.055

0.15

0.111

0.20

0.202

0.25

0.295

0.30

0.435

0.35

0.589

0.40

0.771

0.45

0.980

In the Desmos graphing calculator, I can simply insert the above table and then add the expression y1 ~ 0.5 ax1^2 where x1 is t (time) and y1 is d (displacement). What it will do is draw a curve of best fit and then give me the value for acceleration. I want to do the same thing with ggplot2.

It is almost exactly what I want, but I want a label somewhere in the graph to show what the acceleration is similar to what I did in Desmos. Also, I want to use the same equation I used in Desmos for the regression curve (y1 ~ 0.5 ax1^2). I know that geom_smooth() takes the argument formula but it gave me an error when trying to use that.

t = seq(0, 0.45, 0.05)
d = c(0, 0.028, 0.055, 0.111, 0.202, 0.295, 0.435, 0.589, 0.771, 0.980)
library(ggplot2)
m <- lm(d~I(t^2)-1)
# I means to literally square t before doing the regression and "-1" removes an intercept
# This fits y~z*x^2 instead of y~0.5*a*x^2 so a=z/2
coef(m)
#> I(t^2)
#> 4.828775
ggplot(data.frame(t, d), aes(x = t, y = d)) +
theme_linedraw() + theme(plot.title = element_text(hjust = 0.5)) +
geom_point() +
geom_function(fun=function(x){coef(m)*x^2}) +
ggtitle(paste("a=", coef(m)/2))

This works but it seems like it gave the incorrect result. On Desmos, I got a = 9.68056 which is not the same result here. a in this context is the acceleration due to gravity so it should be somewhere near 9.8.

It is just a simple error. The relationship between a and z is a = z*2.

t = seq(0, 0.45, 0.05)
d = c(0, 0.028, 0.055, 0.111, 0.202, 0.295, 0.435, 0.589, 0.771, 0.980)
library(ggplot2)
m <- lm(d~I(t^2)-1)
# I means to literally square t before doing the regression and "-1" removes an intercept
# This fits y~z*x^2 instead of y~0.5*a*x^2 so a=z*2
coef(m)
#> I(t^2)
#> 4.828775
ggplot(data.frame(t, d), aes(x = t, y = d)) +
theme_linedraw() + theme(plot.title = element_text(hjust = 0.5)) +
geom_point() +
geom_function(fun=function(x){coef(m)*x^2}) +
ggtitle(paste("a=", coef(m)*2))