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.
相关产品推荐
相关产品推荐

