Отображение значения одного столбца на графике ggplot - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь отобразить сводные значения на своем графике для простоты сравнения. Не уверен, правильно ли я сформулировал вопрос, поскольку я не нашел ничего, кроме geom_text ссылок. Я попытаюсь объяснить свои рассуждения ниже.

Базовый фрейм данных с двумя строками, значение по времени.

library(tidyverse)

df <- tibble(
  "sample" = as.factor(c(rep("A",6), rep("B",6))),
  "time"   = c(rep(1:6,2)),
  "value1" = c(10,20,30,60,30,30,13,21,32,64,35,32),
  "value2" = c(5,15,20,30,20,10,6,15,22,31,42,11)
)

> df
# A tibble: 12 x 4
   sample  time value1 value2
   <fct>  <int>  <dbl>  <dbl>
 1 A          1     10      5
 2 A          2     20     15
 3 A          3     30     20
 4 A          4     60     30
 5 A          5     30     20
 6 A          6     30     10
 7 B          1     13      6
 8 B          2     21     15
 9 B          3     32     22
10 B          4     64     31
11 B          5     35     42
12 B          6     32     11

Рассчитайте площади между двумя линиями и соединитесь с исходным фреймворком. (Я присоединился к сводным данным, так как предполагал, что таким образом будет проще отобразить на графиках, может быть, это неверно?)

df <- df %>% 
  group_by(sample) %>% 
  dplyr::summarise(sum1 = sum(value1),
            sum2 = sum(value2),
            auc = abs(sum1-sum2)) %>% 
  dplyr::select(-c(sum1,sum2)) %>% 
  right_join(df)

> df
# A tibble: 12 x 5
   sample   auc  time value1 value2
   <fct>  <dbl> <int>  <dbl>  <dbl>
 1 A         80     1     10      5
 2 A         80     2     20     15
 3 A         80     3     30     20
 4 A         80     4     60     30
 5 A         80     5     30     20
 6 A         80     6     30     10
 7 B         70     1     13      6
 8 B         70     2     21     15
 9 B         70     3     32     22
10 B         70     4     64     31
11 B         70     5     35     42
12 B         70     6     32     11

Построение значений во времени с выделенной областью, которая меня интересует Я не смог понять, как отобразить на графике значение auc. Чтобы уточнить, я хочу извлечь значения 70, 80 и отобразить их, например, в правом нижнем углу фасетных графиков. (НЕ, например, отображение значения 80 в каждой точке графика).

Возможно ли это? Я еще не нашел лучшего способа сообщить об этом go. Благодарим за любую помощь.

df %>% 
      ggplot(aes(x=time,y=value1))+
      geom_line()+
      geom_line(aes(y=value2),color='red')+
      geom_ribbon(aes(ymin = value2, ymax = value1), fill='green', alpha=.3)+
      facet_wrap(~sample)

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Вы можете сделать что-то вроде этого ...

df %>% 
  ggplot(aes(x=time,y=value1))+
  geom_line()+
  geom_line(aes(y=value2),color='red')+
  geom_ribbon(aes(ymin = value2, ymax = value1), fill='green', alpha=.3) +
  geom_text(aes(x = 2, y = 60, label = paste0("AUC = ", auc)), color = "red", data = df %>% distinct(sample, auc)) +
  facet_wrap(~sample)

... что делает этот график:

полученные результаты

1 голос
/ 08 июля 2020
df %>% 
ggplot(aes(x=time,y=value1))+
 geom_line()+
 geom_line(aes(y=value2),color='red')+
 geom_ribbon(aes(ymin = value2, ymax = value1), fill='green', alpha=.3)+
 facet_wrap(~sample) +
 geom_text(aes(x = 2, y = 60, label = auc))

Это дает вам то, что вы хотите, я верю. Вы можете переместить текст, изменив «2» и «60».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...