library(ggplot2) library(readr) library(latex2exp) data_t1 <- read_csv( "m1,m2,a_measured 0.055,0.060,0.380 0.060,0.065,0.354 0.065,0.070,0.323 0.070,0.075,0.310 0.075,0.080,0.303 0.080,0.085,0.279 0.065,0.075,0.649 0.080,0.095,0.780" ) data_t1$cat <- rep("Theoretical", 8) colnames(data_t1) <- c("m1", "m2", "a_measured", "Theoretical") a_theoretical <- function(m) { 9.81 * m } m_from_masses <- function(m1, m2) { (m2 - m1) / (m1 + m2) } x_lab <- function() { TeX(r"($M$)") } y_lab <- function() { TeX(r"($a \ \small{m \cdot s^{-2}}$)") } lm_eqn <- function(df) { m <- lm(df) eq <- substitute( italic(y) == a + b %.% italic(x), list(a = format(unname(coef(m)[1]), digits = 3), b = format(unname(coef(m)[2]), digits = 3)) ) as.character(as.expression(eq)) } th_eqn <- function() { eq <- substitute( italic(y) == b %.% italic(x), list(b = format(unname(9.81), digits = 3)) ) as.character(as.expression(eq)) } data_t1["M"] <- m_from_masses(data_t1["m1"], data_t1["m2"]) data_t1["a"] <- data_t1$M * 9.8 plt <- ggplot( data = data_t1, mapping = aes(x = M, y = a_measured) ) + geom_point( aes(color = "D55E00"), size = 8, ) + geom_smooth( se = FALSE, method = "lm", linewidth = 2.6, col = "#D55E00", ) + geom_segment(aes(x = min(data_t1$M), y = a_theoretical(min(data_t1$M)), xend = max(data_t1$M), yend = a_theoretical(max(data_t1$M)), linetype = "Theoretical"), size = 2.2, color = "#0072B2" ) + theme( axis.text = element_text(size = 32), axis.title = element_text(size = 50), panel.grid.minor = element_line(size = 1.5), panel.grid.major = element_line(size = 2), legend.title = element_blank(), legend.text = element_text(size = 36), legend.key.size = unit(8, "line") ) + labs( x = x_lab(), y = y_lab(), ) + annotate("text", label = lm_eqn(data_t1[, c("a_measured", "M")]), x = 0.076, y = 0.58, size = 18, col = "#D55E00", parse = TRUE, ) + annotate("text", label = th_eqn(), x = 0.068, y = 0.74, col = "#0072B2", size = 18, parse = TRUE, ) + scale_color_manual(name = "", values = c("#D55E00"), labels = "Measured") + scale_linewidth_manual("Theoretical", values = c("Theoretical" = 2)) plt ggsave("plot.svg", plot = plt, width = 30, height = 25, )