在R中绘制布尔值的时间顺序序列

在R中绘制布尔值的时间顺序序列,r,ggplot2,R,Ggplot2,我用的是R 假设我有一个按时间顺序排列的布尔值序列:W或L 如何使用ggplot2获得类似于下图的内容 我有点想用一种组合来工作:形状使用geom_rect,标签使用geom_text,轴上方或下方的标签使用geom_bracket(来自ggpubr)。总体思路是沿轴绘制矩形或其他形状。您可以使用geom_label创建框,但设置宽度常量比较困难,尤其是当标签长度不同时 # Data set for W/L record. Time is arbitrary set.seed(12345) d

我用的是R

假设我有一个按时间顺序排列的布尔值序列:W或L

如何使用ggplot2获得类似于下图的内容


我有点想用一种组合来工作:形状使用
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)
#W/L记录的数据集。时间是任意的
种子集(12345)
df