在R中说明相对时间轴

0x6upsns  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(126)

我有一个包含两列的dataframe:los表示特定事件的停留时间,以及daysbetweenevent。我想创建一个可视化,显示一个单一的线段说明损失和事件之间的交替dayswidth线。我在想los的厚带和daysbetweenvisits的薄带。每个片段将占据数字的相对长度-基本上显示了一个时间轴。
例如,段的顺序将是:2-21-24-12-14-52....,每一个los段是粗的,每一个daysbetweenvisits是一条线,最好在上面标注数字。

df <- data.frame(los = c(2, 24, 14, 0, 4, 9, 7, 3, 1), 
                 daysbetweenvisits = c(21, 12, 52, 218, 73, 36, 0, 18, 0))

字符串

rdlzhqv9

rdlzhqv91#

第一步是将数据转换为正确的格式。为此,您需要计算每个时间段的开始和结束,然后根据它是在“LOS”期间还是在“访问之间”期间对其进行标记。
您可以通过转置数据框并将其连接到单个数字向量来实现此操作。则其累积和将是每个节段结束时的时间点。然后在这个向量的第一个位置加上0,以获得开始时间。您可以将这些放在数据框中,第二列在“LOS”和“BetweenVisits”之间交替:

df <- data.frame(right = cumsum(c(t(df))), 
                 left = head(c(0, cumsum(c(t(df)))), -1),
                 event = rep(c('Stay', 'Between'), len = nrow(df) * 2))
df$right <- ifelse(df$right == df$left, df$right + 1, df$right)

字符串
因此,现在数据的格式正确,可以进行绘图:

df
#>    right left   event
#> 1      2    0    Stay
#> 2     23    2 Between
#> 3     47   23    Stay
#> 4     59   47 Between
#> 5     73   59    Stay
#> 6    125   73 Between
#> 7    126  125    Stay
#> 8    343  125 Between
#> 9    347  343    Stay
#> 10   420  347 Between
#> 11   429  420    Stay
#> 12   465  429 Between
#> 13   472  465    Stay
#> 14   473  472 Between
#> 15   475  472    Stay
#> 16   493  475 Between
#> 17   494  493    Stay
#> 18   495  494 Between


我们可以用ggplot2来画这个图

library(ggplot2) 

ggplot(df, aes(left, '1', linewidth = event, group = event, color = event)) +
  geom_segment(aes(xend = right, yend = '1')) +
  geom_text(aes(left + (right - left)/2, 
                label = ifelse(event == 'Between', right - left, '')), 
            nudge_y = 0.1, color = 'black') +
  scale_linewidth_manual(values = c(1, 6), guide = 'none') +
  scale_color_manual(values = c('gray', 'red3'), guide = 'none') +
  theme_void()


x1c 0d1x的数据
创建于2023-07-27带有reprex v2.0.2

pw136qt2

pw136qt22#

下面是基本的R方法:

# find LOS endpoints
df$from <- c(0, cumsum(head(rowSums(df), -1)))
df$to <- df$from + df$los

par(mar=rep(0, 4))
frame()
plot.window(xlim=c(0, tail(df$to, 1)), ylim=c(0, 0))
segments(df$from[1], 0, tail(df$to, 1), lend=3)
segments(df$from, 0, df$to, lwd=16, col='red', lend=3)
text((head(df$to, -1) + df$from[-1]) / 2, 2*strheight('a'), 
     head(df$daysbetweenvisits, -1))

字符串


我不知道如何解释零值,所以我只是把它们保持为零。

相关问题