Как отобразить различные метки y в уравнениях, используя stat_poly_eq из ggpmisc - PullRequest
2 голосов
/ 14 октября 2019

Я пытаюсь отобразить уравнения на графике, используя stat_poly_eq функцию ggpmisc.

Моя проблема в том, как изменить y= ... в уравнении на y1=... и y2=..., ссылаясь на аргумент key.

Я пытался добавить eq.with.lhs аргумент в отображении, но он не распознает аргумент. Я пытался передать вектор аргументу eq.with.lhs, но он перекрывал оба элемента в каждом уравнении ...

У вас есть идея получше?

В последнем случае я мог бы использоватьgeom_text после того, как я сам вычислил коэффициенты уравнения, но это оказалось менее эффективным способом решения проблемы.

Вот пример моей проблемы.

data <- data.frame(x = rnorm(20)) %>% 
    mutate(y1 = 1.2*x + rnorm(20, sd=0.2),
           y2 = 0.9*x + rnorm(20, sd=0.3)) %>%
    gather(value = value, key = key, -x)  

ggplot(data, aes(x = x, y = value)) +
    geom_point(aes(shape = key, colour = key)) + 
    stat_poly_eq(aes(label = ..eq.label.., colour = key), 
                 formula = y  ~ poly(x, 1, raw = TRUE),
                 eq.x.rhs = "x",
                 # eq.with.lhs = c(paste0(expression(y[1]), "~`=`~"),
                 #                 paste0(expression(y[2]), "~`=`~")),
                 eq.with.lhs = paste0(expression(y[ind]), "~`=`~"),
                 parse = TRUE) +
    ylab(NULL)

1 Ответ

1 голос
/ 14 октября 2019

Я не совсем уверен, возможно ли сделать это через ggpmisc, но вы можете изменить данные после построения графика, например:

library(tidyverse)
library(ggpmisc)

data <- data.frame(x = rnorm(20)) %>% 
    mutate(y1 = 1.2*x + rnorm(20, sd=0.2),
           y2 = 0.9*x + rnorm(20, sd=0.3)) %>%
    gather(value = value, key = key, -x)  

p <- ggplot(data, aes(x = x, y = value)) +
    geom_point(aes(shape = key, colour = key)) + 
    stat_poly_eq(aes(label = ..eq.label.., colour = key), 
                 formula = y  ~ poly(x, 1, raw = TRUE),
                 eq.x.rhs = "x",
                 eq.with.lhs = paste0(expression(y), "~`=`~"),
                 parse = TRUE) +
    ylab(NULL)
temp <- ggplot_build(p)
temp$data[[2]]$label <- temp$data[[2]]$label %>% 
    fct_relabel(~ str_replace(.x, "y", paste0("y[", 1:2, "]")))
grid::grid.newpage()
grid::grid.draw(ggplot_gtable(temp))

example

...