Translating a group of geom_abline(s) in ggplot

Hello. First time posting. I used geom_abline() to plot a family of lines created with random slopes and intercepts. They make a bowtie pattern with the "knot" on the y-intercept. I would like to translate the "knot" to be at x = mean(var_1) instead of on x=0 so that the intercept a represents the expected value of var_2 when var_1 is at its mean. This should be easy but I can't seem to think of a simple way to do it. If I was working with the full formula for a line it would just be y = b(x - mean(var_1)) + a, but with ablines you only provide a,b and the x's are provided from the x-axis so I don't know how to manipulate them. Perhaps I'm using the wrong geom? Thank you in advance for any help.

set.seed(1237)
n <- 30
mean_of_var_1 = 37

a <- rnorm(n, 37, 1)
b <- rnorm(n, 0, .6)  

test_tbl <- tibble(
  a_intercept = a,
  b_slope = b)

test_tbl %>% ggplot() + 
   geom_abline(intercept =  a,
               slope     =  b) +
  ylim(c(0,100)) +
  xlim(c(0,100)) +
  labs(
    x = "var_1",
    y = "var_2"
  )

this is equivalent to y = bx + (a - b * mean(var_1)) so I guess you could use the same code but change the intercept ?

set.seed(1237)
library(ggplot2)
n <- 30
mean_of_var_1 = 37

a <- rnorm(n, 37, 1)
b <- rnorm(n, 0, .6)  

test_tbl <- tibble::tibble(
  a_intercept = a,
  b_slope = b)

ggplot(test_tbl) + 
  geom_abline(intercept =  a - b*mean_of_var_1,
              slope     =  b) +
  ylim(c(0,100)) +
  xlim(c(0,100)) +
  labs(
    x = "var_1",
    y = "var_2"
  )

Created on 2019-12-09 by the reprex package (v0.3.0)

Is this what you want ?

Also, know that ggplot2::stat_function allows you to plot function

1 Like

Thank you cderv! This is what I needed - as I thought, I was missing the forest for the trees.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.