R ggplot绘图折线未按预期连接问题求助
ggplot折线图分段不连接问题解决
问题原因
原代码中geom_line的分组设置为interaction(vacc_cover, shape),相当于把数据拆分为4个独立分组:Slow-Observed、Slow-Interpolated、Rapid-Observed、Rapid-Interpolated,每个分组仅包含1-2个数据点,因此只能生成零散的短线条,无法实现同个插值类型的线条首尾相连。
修正方案
根据你的需求,推荐两种实现方式:
方式1:用线型区分插值类型,点颜色区分观测/插值(视觉清晰度最高)
library(tidyverse) p2_plt_data <- tibble(year = c(1985, 1990, 1995, 2000, 1985, 1990, 1995, 2000), p2 = c(0, 0.00127, 0.0641, 0.85, 0, 0.765, 0.850, 0.85), shape = rep(c("Slow", "Rapid"), each = 4), vacc_cover = rep(c("Observed", "Interpolated","Interpolated", "Observed"), times = 2) ) ggplot(p2_plt_data, aes(x = year, y = p2)) + # 仅按shape分组,保证同类型插值的线条完整连接,用线型区分Slow/Rapid geom_line(aes(group = shape, linetype = shape), size = 0.8) + # 点填充色区分Observed/Interpolated geom_point(aes(fill = vacc_cover), shape = 21, size = 2) + # 可自定义配色匹配你原有的蓝橙效果 scale_fill_manual(values = c("Observed" = "#0072B2", "Interpolated" = "#E69F00"))
方式2:线段和点都用颜色区分观测/插值,用点形状区分插值类型
如果需要保留线段按Observed/Interpolated分色的需求,可通过geom_segment实现:
library(tidyverse) p2_plt_data <- tibble(year = c(1985, 1990, 1995, 2000, 1985, 1990, 1995, 2000), p2 = c(0, 0.00127, 0.0641, 0.85, 0, 0.765, 0.850, 0.85), shape = rep(c("Slow", "Rapid"), each = 4), vacc_cover = rep(c("Observed", "Interpolated","Interpolated", "Observed"), times = 2) ) %>% group_by(shape) %>% # 生成下一个点的坐标,用于绘制连续线段 mutate(next_year = lead(year), next_p2 = lead(p2)) %>% ungroup() ggplot(p2_plt_data, aes(x = year, y = p2)) + # 线段按shape分组保证连续,颜色对应vacc_cover属性 geom_segment(aes(xend = next_year, yend = next_p2, colour = vacc_cover, group = shape), size = 0.8, na.rm = T) + # 点同时映射颜色和形状,同时区分两类属性 geom_point(aes(colour = vacc_cover, shape = shape), size = 2) + scale_colour_manual(values = c("Observed" = "#0072B2", "Interpolated" = "#E69F00"))
内容的提问来源于stack exchange,提问作者gokhale
相关产品推荐
相关产品推荐

