重新排列 x 轴以显示多年数据的儒略日期(例如 0-365)一次

Posted

技术标签:

【中文标题】重新排列 x 轴以显示多年数据的儒略日期(例如 0-365)一次【英文标题】:Re-arranging the x-axis to show Julian Dates (e.g., 0-365) once for multi-year data 【发布时间】:2022-01-21 05:56:51 【问题描述】:

我已包含重现当前结果所需的数据和代码。我有一张针对不同个人的图表 (4),它们是在不同年份收集的数据。我目前的 x 轴是 Julian Dates,所以它显示了每年的日期。

我想让它只显示一次从 0-365 的 x 轴,而不是重复多年。有没有什么好的方法可以做到这一点?我想基本上我要问的是是否可以将这四条线压缩成一个具有相同 x 轴和 y 轴的图形?

library(ggforce)
library(dplyr)
library(lubridate)

df <- read.csv("https://raw.githubusercontent.com/jhnhng/Data/main/NSD_Figure.csv")
df$t2  <- as.POSIXct(df$t2)

ggplot(ind_steps, aes(x = t2, y = NSD)) +
  labs(x = "Julian Date", y = "Net Squared Displacement") +
  geom_line() + theme_bw() +
  theme(axis.text.x = element_text(angle = 90)) +
  scale_x_datetime(date_breaks = '10 days', date_labels = '%j') +
  facet_wrap(~class, ncol = 1 , nrow = 4)

【问题讨论】:

记住minimal reproducible example 的minimal 部分。您有 36 行代码用于准备数据,而 6 行代码用于绘图,这正是问题所在——只需包含 ind_steps 的 workable sample。您还将加载包并添加问题本身不需要的代码(sf 似乎没有被使用,如果分面与问题相关,facet_wrap 而不是facet_wrap_paginate 就足够了) .缩小问题的范围有助于您调试并帮助我们了解问题的实际情况 【参考方案1】:
df$t3 <- as.numeric(format(df$t2, "%j"))

然后

ggplot(df, aes(x = t3, y = NSD)) +
  ...
  scale_x_continuous(breaks = scales::breaks_width(10)) +
  ...

【讨论】:

以上是关于重新排列 x 轴以显示多年数据的儒略日期(例如 0-365)一次的主要内容,如果未能解决你的问题,请参考以下文章

如何更改显示日期和时间的 x 轴以仅显示月份名称?

将 Netezza 时间戳转换为儒略日数

蜂巢朱利安日期转换

Plotly 轴以相反的顺序显示日期(最近到最早)-Python

datetime.strptime 不接受自定义函数传递的参数

如何在雪花日期数据类型字段中插入儒略日期