oli.m
November 16, 2021, 12:05am
1
I would like to automatically draw a vertical line at the intersect of two geom_density()
plots in ggplot()
within geom_vline()
?
data %>%
ggplot(aes(score, fill = actual_given_therapy)) +
geom_density(alpha = 0.5) +
geom_vline(xintercept = 3, color = "black")
If I would know the two functions created by geom_density()
, I guess it is possible to find the intersection with uniroot()
, but is it even possible to extract them?
I want to show the theoretical threshold of a test visually.
Thank you for your help guys!
1 Like
AlexisW
November 17, 2021, 5:50am
2
You can use layer_data()
to extract the computed variables, as described e.g. here :
library(tidyverse)
p <- tibble(score = c(rnorm(300, 3, 3), rnorm(300, 6, 3)),
category = rep(c("a","b"), each = 300))|>
ggplot(aes(score, fill = category)) +
geom_density(alpha = 0.5)
computed_variables <- layer_data(p)
inversions <- computed_variables |>
group_by(x) |>
arrange(fill) |>
mutate(delta_y = diff(y)) |>
ungroup() |>
pull(delta_y) |>
sign() |>
diff() |>
(\(.x) which(.x != 0))() |>
(\(.x) computed_variables$x[.x])()
p +
geom_vline(xintercept = inversions,
linetype = "dotted")
Created on 2021-11-17 by the reprex package (v2.0.1)
3 Likes
system
Closed
November 24, 2021, 5:51am
3
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed. If you have a query related to it or one of the replies, start a new topic and refer back with a link.