Есть ли более чистый способ добавить текст / метки к нескольким вертикальным строкам: geom_vline ()? - PullRequest
0 голосов
/ 23 апреля 2019

Я хотел бы добавить ручные метки поверх графика, чтобы определить вертикальные линии.Каждая «панель» представляет собой хромосому.

Мой сюжет:

plot

Перед использованием geom_vline() я попытался поиграть с facet_grid(), и маркировка была идеальной, но Xось не была пропорциональна длине хромосомы даже с аргументами scales = "free_x и space = "free_x" (дополнительные сведения / коды / ссылки на графики см. в предыдущем посте )

График с facet_grid:

plot 2

Теперь я хотел бы вручную добавить метки, которые аналогично выглядят как метки facet_grid панели.

У меня естьпопытался поиграть с annotate и geom_text, и лучшая идея для меня - использовать geom_text, чтобы каждая метка панели имела свою собственную строку кода (?), и теперь код высасывает память / не работает.

Код для создания базового графика можно найти на Глубина нанесения графика в окнах размером 1 КБ? .

Чтобы добавить метки панели:

label.plot <- Xdepth.average.plot +
  geom_text(aes(x=115109, y=200, label="I"), colour="black") +
  geom_text(aes(x=636810, y=200, label="II"), colour="black") +
  geom_text(aes(x=1201712, y=200, label="III"), colour="black") +
  geom_text(aes(x=2125989, y=200, label="IV"), colour="black") +
  geom_text(aes(x=3180392, y=200, label="V"), colour="black") +
  geom_text(aes(x=3603910, y=200, label="VI"), colour="black") +
  geom_text(aes(x=4284460, y=200, label="VII"), colour="black") +
  geom_text(aes(x=5111252, y=200, label="VIII"), colour="black") +
  geom_text(aes(x=5612517, y=200, label="IX"), colour="black") +
  geom_text(aes(x=6205337, y=200, label="X"), colour="black") +
  geom_text(aes(x=6911620, y=200, label="XI"), colour="black") +
  geom_text(aes(x=7784117, y=200, label="XII"), colour="black") +
  geom_text(aes(x=8785421, y=200, label="XIII"), colour="black") +
  geom_text(aes(x=9639803, y=200, label="XIV"), colour="black") +
  geom_text(aes(x=10577615, y=200, label="XV"), colour="black") +
  geom_text(aes(x=11597293, y=200, label="XVI"), colour="black")
label.plot

1 Ответ

0 голосов
/ 25 апреля 2019

Должна быть возможность репликации этого формата с использованием нескольких геом на основе одной таблицы, содержащей координаты, которые вас интересуют. Например, если у вас есть список того, куда должны идти вертикальные линии, вы можете использовать его для создания линий, прямоугольников и текста.

library(tidyverse)

df <- tribble(     ~x,   ~y, ~label,
               115109,  200, "I",
               636810,  200, "II",
              1201712,  200, "III",
              2125989,  200, "IV",
              3180392,  200, "V",
              3603910,  200, "VI",
              4284460,  200, "VII",
              5111252,  200, "VIII",
              5612517,  200, "IX",
              6205337,  200, "X",
              6911620,  200, "XI",
              7784117,  200, "XII",
              8785421,  200, "XIII",
              9639803,  200, "XIV",
              10577615, 200, "XV",
              11597293, 200, "XVI",
              12597293, 200, "") # added to give end point for XVI

ggplot(df) +
  geom_segment(aes(x = x, xend = x,
                   y = 0, yend = 200)) +
  geom_rect(aes(xmin = x, xmax = lead(x),
                ymin = y - 10, ymax = y + 10),
            fill = "gray70", color = "black") +
  geom_text(aes(x = (x + lead(x))/2,
                y = y, label = label)) +
  coord_cartesian(ylim = c(0, 230))

enter image description here

...