Построение упорядоченной по времени последовательности логических значений в R - PullRequest
0 голосов
/ 05 мая 2020

Я использую R.

Предположим, у меня есть упорядоченная по времени последовательность логических значений: либо W, либо L.

Как я могу получить что-то похожее на график ниже с помощью ggplot2?

enter image description here

1 Ответ

1 голос
/ 05 мая 2020

У меня вроде есть что-то для работы, используя комбинацию geom_rect для форм, geom_text для меток и geom_bracket (от ggpubr) для меток выше или ниже оси. Основная идея состоит в том, чтобы нарисовать прямоугольники или другие формы вдоль оси. Вы можете использовать geom_label для создания блоков, но установить постоянную ширину сложнее, особенно если ваши метки имеют разную длину.

# Data set for W/L record.  Time is arbitrary
set.seed(12345)
df <- data.frame(
  time=1:10,
  result=sample(c('W','L'),10,replace=TRUE)
)

# data set for labels
bracket.labels <- data.frame(
  x.from=c(1, 2, 5, 6),
  x.to=c(3, 5, 7, 10),
  lab=c('Weak', 'Had a problem', 'Good times', 'End of year')
)

# the plot
library(ggpubr)

ggplot(df, aes(x=time)) +
  geom_hline(yintercept=0) +
  geom_rect(aes(fill=result, xmin=time-0.4, xmax=time+0.4),
    ymin=-0.1, ymax=0.1, show.legend = FALSE) +
  geom_text(y=0, color='white',
    aes(label=result), fontface='bold') +
  ylim(-0.5,1.5) + theme_void() +
  scale_fill_manual(name=NULL, values=c('brown1', 'forestgreen')) +
  geom_bracket(data=bracket.labels, y.position=0.2,
    aes(xmin=x.from, xmax=x.to, label=lab),
    step.increase = 1, tip.length = 0.3)

enter image description here

Вероятно, вы могли бы использовать другие решения, поскольку это один из тех вопросов, на который требуется творческий подход в ответе. Другие методы могут включать использование geom_tile (я пробовал, но мне это не понравилось) или создать все это с помощью пользовательских аннотаций.

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