geom_hline с несколькими точками и facet_wrap

Я пытаюсь построить горизонтальные линии в определенных точках моих данных. Идея состоит в том, что я хотел бы получить горизонтальную линию от первого значения эквивалентных итераций (то есть 0) в точке пересечения y для каждой из моих осей; SA, VLA, HLA. Мой вопрос прояснится с данными.

iterations  subsets equivalent_iterations   axis    ratio1        ratio2
0              0                       0     SA     0.023569024 0.019690577
0              0                       0     SA     0.023255814 0.019830028
0              0                       0     VLA    0.025362319 0.020348837
0              0                       0     HLA    0.022116904 0.021472393
2              2                       4     SA     0.029411765 0.024911032
2              2                       4     SA     0.024604569 0.022838499
2              2                       4     VLA    0.026070764 0.022727273
2              2                       4     HLA    0.027833002 0.027888446
4             15                      60     SA     0.019746121 0.014403292
4             15                      60     SA     0.018691589 0.015538291
4             15                      60     VLA    0.021538462 0.01686747
4             15                      60     HLA    0.017052375 0.017326733
16            5                       80     SA     0.019021739 0.015021459
16            5                       80     SA     0.020527859 0.015384615
16            5                       80     VLA    0.023217247 0.017283951
16            5                       80     HLA    0.017391304 0.016298021

и это мой сюжет с использованием ggplot

ggplot(df)+ 
  aes(x = equivalent_iterations, y = ratio1, color = equivalent_iterations)+ 
  geom_point() + 
  facet_wrap(~axis) + 
  expand_limits(x = 0, y = 0) 

Я хочу, чтобы для каждой оси SA, VLA, HLA (то есть для каждого facet_wrap) горизонтальная линия от первой точки (которая находится на 0 эквивалентных итерациях) в точке пересечения y (которая задается отношением1 в столбце 5 в первых 4 ценности). Любая помощь будет оценена. заранее спасибо

1 ответ

Решение

Вы можете относиться к этому как к любому другому geom_*, Просто создайте новый столбец со значением ratio1, при котором вы хотите построить горизонтальную линию. Я делаю это путем подстановки данных с помощью тех, где итерации = 0 (обратите внимание, что SA имеет 2 из них) и присоединением столбца ratio1 к исходному фрейму данных. Затем этот столбец можно передать вызову эстетики в geom_hline(),

library(tidyverse)

df %>% 
  left_join(df %>% 
              filter(iterations == 0) %>% 
              select(axis, intercept = ratio1)) %>% 

  ggplot(aes(x = equivalent_iterations, y = ratio1, 
             color = equivalent_iterations)) +
  geom_point() + 
  geom_hline(aes(yintercept = intercept)) +
  facet_wrap(~axis) + 
  expand_limits(x = 0, y = 0) 

Другие вопросы по тегам