解决R语言折线图断点问题:绘制实测/预估分段线型折线
解决ggplot折线断点问题
你的代码出现断点是因为geom_line会根据group字段分组绘制,不同组的点之间不会自动连接。2008年的点属于measured组,2024年的点属于estimate组,所以这两个点之间没有连线。
解决方法是把2008年的节点同时加入两个分组,让折线能从实测段平滑过渡到预估段。修改后的数据和代码如下:
# 构造包含过渡节点的数据 date <- as.POSIXct(c("1981-01-01", "2008-01-01", "2008-01-01", "2024-01-01", "2050-01-01"), format = "%Y-%m-%d", tz=Sys.timezone()) sed_pool_vol <- as.numeric(c(0, 938, 938, 1493, 2397 )) group <- c("measured", "measured", "estimate", "estimate", "estimate") sed_df <- data.frame(date, sed_pool_vol, group) # 绘制折线 ggplot(sed_df, aes(x = date, y = sed_pool_vol, linetype = group)) + geom_line() + scale_linetype_manual("数据类型", values=c("estimate"=2, "measured"=1))
另一种方法是分两次调用geom_line,分别指定不同的数据集和线型,同样能实现连续折线:
ggplot() + # 绘制实测段(实线) geom_line(data = sed_df[sed_df$group == "measured", ], aes(x = date, y = sed_pool_vol), linetype = 1) + # 绘制预估段(虚线),包含2008年节点实现连接 geom_line(data = sed_df[sed_df$date >= as.POSIXct("2008-01-01"), ], aes(x = date, y = sed_pool_vol), linetype = 2) + # 添加自定义图例 scale_linetype_manual("数据类型", values=c("实测值"=1, "预估值"=2)) + labs(linetype = "数据类型")
这两种方法都能解决断点问题,让折线从2008年的节点平滑过渡到后续预估段,同时保留正确的图例。
内容的提问来源于stack exchange,提问作者DAY
相关产品推荐
相关产品推荐

