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

R语言实现单条回归线分时段设置不同线型(实线/虚线)

解决ggplot2平滑曲线分时段切换虚实线的问题

核心思路是将数据按1960-2020年和2020年之后拆分为两个子集,分别调用geom_smooth绘制,对应设置实线和虚线样式,同时保持种族分组的颜色一致性。

步骤示例

1. 准备/转换数据

先确保年份字段是数值型,若为字符型需先转换。以下是模拟的示例数据:

library(tidyverse)

# 模拟包含race、year、value的数据集
set.seed(123)
df <- expand.grid(race = c("White", "Black", "Asian"),
                  year = seq(1960, 2030, 5)) %>%
  mutate(value = case_when(
    race == "White" ~ 50 + 0.3*year + rnorm(n(), 0, 2),
    race == "Black" ~ 40 + 0.4*year + rnorm(n(), 0, 2),
    race == "Asian" ~ 55 + 0.25*year + rnorm(n(), 0, 2)
  ))

# 若原始数据year是字符型,执行转换
# df <- df %>% mutate(year = as.numeric(year))

2. 绘制分时段虚实平滑曲线

ggplot(df, aes(x = year, y = value, color = race)) +
  # 1960-2020年:实线平滑曲线
  geom_smooth(data = subset(df, year <= 2020), se = FALSE, linetype = 1) +
  # 2020年后:虚线平滑曲线
  geom_smooth(data = subset(df, year > 2020), se = FALSE, linetype = 2) +
  # 自定义标签与主题
  labs(x = "年份", y = "指标值", color = "种族") +
  theme_minimal() +
  # 优化图例(可选:让图例仅显示种族颜色,虚实由曲线时段区分)
  guides(color = guide_legend(override.aes = list(linetype = 1)))

关键说明

  • 两次geom_smooth共享同一color = race映射,ggplot会自动为每个种族分配一致的颜色,无需额外配置。
  • 若需指定平滑方法(如线性拟合method = "lm"或局部拟合method = "loess"),需在两个geom_smooth中保持参数一致。
  • 若要让图例同时显示虚实线,可调整scale_linetype_manual和guides,但通常仅需曲线本身在时段切换时样式变化即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:01:07