You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中绘制相对时间线可视化图表

实现交替粗细分段的时间线可视化

可以用ggplot2配合数据预处理来实现这个需求,步骤如下:

1. 数据预处理

首先把原始的两列数据转换成交替排列的分段数据,计算每个分段的起始、结束位置,同时标记分段类型和对应数值:

library(ggplot2)

# 原始数据
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))

# 构造交替分段的数据框
segments <- data.frame(
  type = rep(c("los", "daysbetweenvisits"), nrow(df)),
  value = c(rbind(df$los, df$daysbetweenvisits)),
  # 计算每个分段的结束位置(累积和)
  end = cumsum(c(rbind(df$los, df$daysbetweenvisits)))
)

# 计算每个分段的起始位置(上一个分段的结束位置)
segments$start <- c(0, head(segments$end, -1))

# 过滤掉数值为0的分段(避免无效空白段)
segments <- segments[segments$value != 0, ]

# 计算分段中间位置(用于标注数值)
segments$mid <- (segments$start + segments$end) / 2

2. 绘制可视化图表

用geom_segment绘制不同粗细的线段,geom_text添加数值标注:

ggplot(segments, aes(x = start, xend = end, y = 1, yend = 1)) +
  # 绘制分段:los用粗线,间隔天数用细线
  geom_segment(aes(size = type), color = "black") +
  # 设置线宽:los设为3,间隔天数设为1
  scale_size_manual(values = c("los" = 3, "daysbetweenvisits" = 1)) +
  # 添加数值标注
  geom_text(aes(x = mid, label = value), y = 1.1, size = 4) +
  # 调整主题,隐藏冗余元素
  theme_minimal() +
  theme(
    axis.text.y = element_blank(),
    axis.title.y = element_blank(),
    axis.title.x = element_text(label = "累计天数"),
    legend.position = "none",
    panel.grid = element_blank()
  ) +
  labs(title = "停留时长与访问间隔时间线")

效果说明

  • 粗线段对应los列的停留时长,细线段对应daysbetweenvisits列的间隔天数
  • 分段长度与对应数值成比例,横轴为累计天数
  • 分段上方标注了对应数值,清晰展示各阶段时长
  • 自动过滤数值为0的分段,避免无意义的空白段

内容的提问来源于stack exchange,提问作者ltong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:25:16