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

R语言ggplot2可视化优化:多年份个体数据X轴改为单次显示0-365儒略日并合并子图至同一坐标轴

解决方案:调整X轴范围与整合曲线

没问题,我帮你搞定这两个需求!我们先从数据处理入手,再分别实现两种可视化方式:

第一步:数据预处理修正

首先修正代码里的笔误(你读入的是df但ggplot用了ind_steps),同时提取0-365范围的儒略日(替代原来的datetime类型x轴,避免按年份重复显示):

library(ggforce)
library(dplyr)
library(lubridate)
library(ggplot2) # 建议显式加载ggplot2

# 读入数据并处理日期
df <- read.csv("https://raw.githubusercontent.com/jhnhng/Data/main/NSD_Figure.csv")
df$t2 <- as.POSIXct(df$t2)

# 提取0-365范围的儒略日(yday返回1-366,减1转为0起始)
df <- df %>%
  mutate(julian_day = yday(t2) - 1)

需求1:保持分面,X轴统一显示0-365范围

修改ggplot的x轴为我们提取的julian_day(连续数值),并设置x轴刻度,这样每个子图的X轴都会是统一的0-365范围,不会按年份重复儒略日:

ggplot(df, aes(x = julian_day, y = NSD)) + 
  labs(x = "Julian Date", y = "Net Squared Displacement") + 
  geom_line() + 
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 90)) + 
  # 设置连续型x轴的刻度,每10天一个标记
  scale_x_continuous(breaks = seq(0, 360, by = 10), limits = c(0, 365)) + 
  facet_wrap(~class, ncol = 1 , nrow = 4)

需求2:将4条曲线整合至同一图表

只需移除facet_wrap,并在aes中加入color = class来区分不同个体,这样所有曲线共享同一XY轴:

ggplot(df, aes(x = julian_day, y = NSD, color = class)) + 
  labs(x = "Julian Date", y = "Net Squared Displacement", color = "Individual") + 
  geom_line(linewidth = 1) + # 可选:调整线条粗细更易区分
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 90)) + 
  scale_x_continuous(breaks = seq(0, 360, by = 10), limits = c(0, 365)) +
  # 可选:自定义颜色方案,让个体区分更明显
  scale_color_viridis_d(option = "plasma")

关键修改说明

  • 用yday(t2) - 1提取0-365的儒略日,将x轴从datetime类型转为连续数值类型,彻底避免了按年份重复显示儒略日的问题。
  • 整合曲线时,通过color = class映射个体变量,配合图例清晰区分不同曲线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:27:35