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

Julia中Plots.jl与TimeSeries.jl时间序列xticks解析及自定义设置

Plots绘制时间序列的X轴刻度疑问与解决方法

问题背景

我编写了以下代码:

using Plots
using TimeSeries

apple_ta = readtimearray("apple.csv")

p = plot(apple_ta[:Open])

Plots.xticks(p)

执行后得到输出:

1-element Vector{Tuple{Vector{Float64}, Vector{String}}}:
 ([735599.0, 736330.0, 737060.0, 737791.0], ["2015-01-01", "2017-01-01", "2019-01-01", "2021-01-01"])

我不清楚735599这类数值的来源,最初以为是X轴日期的时间戳,但并非如此。请问这些数值来自哪里?

我的最终需求是能够使用xticks!函数设置任意想要的日期刻度,请问该如何操作?

附:apple.csv的前5行内容:

Date,Open,Close,Volume
2015-01-02,27.84749984741211,27.332500457763672,212818400
2015-01-05,27.072500228881836,26.5625,257142000
2015-01-06,26.635000228881836,26.565000534057617,263188400
2015-01-07,26.799999237060547,26.9375,160423600
2015-01-08,27.3075008392334,27.97249984741211,237458000

解答

1. 735599这类数值的来源

这些数值是**儒略日(Julian Day)**的浮点数表示,Julia的Date类型内部就是用儒略日来存储日期的。Plots在绘制TimeSeries的时间序列时,会把日期转换成对应的儒略日作为X轴的底层坐标值,而图表上显示的是格式化后的日期字符串。

你可以用下面的代码验证:

using Dates
Dates.value(Date("2015-01-01")) # 输出735599

2. 使用xticks!设置任意日期刻度

只需按以下步骤操作:

  • 定义你需要的目标日期列表(用Date类型)
  • 将日期转换为对应的儒略日数值(通过Dates.value())
  • 自定义刻度显示的标签字符串(用Dates.format()设置格式)
  • 调用xticks!传入数值数组和标签数组

示例代码如下:

using Plots
using TimeSeries
using Dates

# 读取数据
apple_ta = readtimearray("apple.csv")
p = plot(apple_ta[:Open])

# 自定义想要的刻度日期
target_dates = [Date("2015-03-01"), Date("2016-06-01"), Date("2017-09-01"), Date("2019-01-01")]
# 转换为儒略日数值
x_tick_values = Dates.value.(target_dates)
# 设置标签格式,比如"YYYY-MM"
x_tick_labels = Dates.format.(target_dates, "YYYY-MM")

# 应用刻度设置
xticks!(p, (x_tick_values, x_tick_labels))

# 显示图表
display(p)

如果需要显示完整日期(如"YYYY-MM-DD"),只需修改Dates.format的第二个参数为对应的格式字符串即可。


内容的提问来源于stack exchange,提问作者Bex T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:25:23