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

如何用ggplot2制作含多年数据的横向花期时长线段图

解决多年份花期横向线段图的ggplot2实现

首先确认你的数据集需包含处理(treatment)、年份(year)、始花儒略日(start_jd)、**末花儒略日(end_jd)**四个核心字段。以下是模拟的数据集子集(可替换为你的真实数据):

# 模拟数据集
flower_data <- data.frame(
  treatment = rep(c("处理1", "处理2", "处理3"), each = 3),
  year = rep(c(2020, 2021, 2022), 3),
  start_jd = c(115, 120, 118, 130, 132, 128, 108, 112, 110),
  end_jd = c(135, 140, 138, 150, 153, 147, 128, 132, 130)
)

多年份扩展的ggplot2代码

核心是利用year作为分组变量,绘制多条线段并添加年份标注:

library(ggplot2)

ggplot(flower_data, aes(y = treatment)) +
  # 绘制横向花期线段:按年份区分颜色,线段两端对应始花/末花儒略日
  geom_segment(aes(x = start_jd, xend = end_jd, yend = treatment, color = factor(year)),
               size = 1.2, lineend = "round") +
  # 添加年份标注:位置选线段中点,微调y值避免与线段重叠
  geom_text(aes(x = (start_jd + end_jd)/2, 
                y = as.numeric(treatment) + 0.1,
                label = year),
            size = 3.5, color = "black") +
  # 设置坐标轴与标题
  labs(x = "儒略日(Julian Date)", y = "处理(Treatment)", 
       color = "年份(Year)", title = "不同处理的多年花期时长对比") +
  # 优化主题可读性
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5),
        legend.position = "top")

关键细节说明

  • 若需用线型而非颜色区分年份,将color = factor(year)替换为linetype = factor(year)即可
  • 如果原始数据是宽格式(比如每列对应一个年份的始/末花日),先用tidyr::pivot_longer转为长格式:
    library(tidyr)
    # 示例宽格式转长格式
    wide_data <- data.frame(
      treatment = c("处理1", "处理2", "处理3"),
      start_2020 = c(115,130,108),
      end_2020 = c(135,150,128),
      start_2021 = c(120,132,112),
      end_2021 = c(140,153,132)
    )
    
    long_data <- wide_data %>%
      pivot_longer(cols = -treatment,
                   names_to = c(".value", "year"),
                   names_sep = "_") %>%
      mutate(year = as.integer(year))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:20