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

如何在R中按城市绘制仅连接连续日期点的不连续折线

解决方案

核心思路是给每个城市的连续日期段分配独立的分组标签,让plotly仅对同组内的点连线,间隔位置自然断开。

1. 前置依赖

需提前加载两个工具包:

library(plotly)
library(dplyr)

2. 完整可运行代码

# 构造数据集(修正原代码中数据框构造错误)
city = c(rep("paris", 4), rep("lyon", 11), rep("marseille", 10), rep("lille", 5), rep("toulouse", 4), rep("bordeaux", 3))
start = c("2018-08-04", "2018-08-05", "2018-08-06", "2018-08-07", "2018-07-25", "2018-07-26", "2018-07-27", "2018-07-30", "2018-07-31", "2018-08-01", "2018-08-02", "2018-08-03", "2018-08-04", "2018-08-05", "2018-08-06", "2018-07-29", "2018-07-30", "2018-07-31", "2018-08-01", "2018-08-02", "2018-08-03", "2018-08-04", "2018-08-05", "2018-08-06", "2018-08-07", "2018-08-03", "2018-08-04", "2018-08-05", "2018-08-06", "2018-08-07", "2018-08-04", "2018-08-05", "2018-08-06", "2018-08-07", "2018-08-03", "2018-08-04", "2018-08-05")
max = c(rep(36.4, 4), rep(37.2,3), rep(38.4,8), rep(37.4,10), rep(36.7,5), rep(34.9,4), rep(34.8,3))
tab = data.frame(city = city, start = start, max = max)
tab$max = as.numeric(tab$max)
tab$start = as.Date(tab$start)

# 按城市生成连续日期段分组标签
tab <- tab %>%
  group_by(city) %>%
  arrange(start, .by_group = TRUE) %>%
  # 计算与上一行的日期差值,首行默认差值为1
  mutate(date_diff = c(1, diff(start))) %>%
  # 差值大于1天就生成新的分组id
  mutate(segment_id = cumsum(date_diff > 1)) %>%
  ungroup()

# 绘制不连续折线图
fig <- plot_ly(tab, x = ~start, y = ~max, color = ~city, group = ~interaction(city, segment_id), mode = 'lines+markers')
fig

关键逻辑说明

  • segment_id字段:同一城市下,每遇到一次日期间隔大于1天的情况,分组id就+1,保证每一段连续日期都有独立的分组标识
  • 绘图时通过group = ~interaction(city, segment_id)指定连线规则:仅属于同一个城市、同一个连续段的点才会被连接,不同段的点自动断开,同时color参数仍然按城市区分,保证同一个城市的所有线段颜色一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:03