使用纪元秒作为 X 轴值时,如何格式化 X 轴刻度标签?
How do I format X Axis tick labels when using Epoch seconds as X axis values?
我有以下数据集:
octave:42> yy
yy =
1420174800.00000 21.70000 21.93000 21.64000 21.81000 1949882.00000
1420434000.00000 21.92000 22.23000 21.90900 22.17000 3189214.00000
1420520400.00000 22.15000 22.51000 22.08000 22.41000 4810496.00000
1420606800.00000 22.21000 22.27500 22.07000 22.11000 2397372.00000
1420693200.00000 21.93000 21.93600 21.70000 21.73000 2797149.00000
1420779600.00000 21.68000 21.98000 21.68000 21.90000 2377333.00000
1421038800.00000 21.88000 22.15000 21.87000 22.07000 2347871.00000
1421125200.00000 21.94000 22.30000 21.76500 22.15000 5255049.00000
1421211600.00000 22.40000 22.51900 22.24000 22.25000 5843980.00000
1421298000.00000 22.18000 22.48000 22.14000 22.47990 3498303.00000
如果我绘制它,我会得到以下图表:
octave:44> plot(yy(:,1), yy(:,5))
根据 Octave 文档 (https://octave.sourceforge.io/octave/function/datetick.html),我尝试了以下方法来显示年份而不是 UNIX 纪元秒值。
octave:48> plot(yy(:,1), yy(:,5))
octave:49> datetick('x','YYYY')
但这是结果:
我想学习如何显示年 (YYYY) 和年月 (YY-MM)。我不确定 Matlab 解决方案是否也适用于 Octave。
短版
plot( arrayfun( @(x) datenum([1970, 1, 1, 0, 0, x]), yy(:,1) ), yy(:,5) )
datetick( 'x', 'yyyy' )
说明
您拥有的数字是 unix 纪元(即自 1970-1-1 00:00:00 UTC 以来的秒数)。
你从 datetick 中得到奇怪数字的原因是因为它不期望 unix 纪元作为输入,而是“日期数字”(自 0000-1-0 00:00:00 UTC 以来的小数天数,无论那是什么意思)。
您可以做的是使用您的值通过 datevec 转换为 datenum。例如。您的第一个值,即 1420174800,可以像这样转换为 datenum
datenum([1970,1,1,0,0,1420174800]) % i.e. the 1420174800th second of 1970-01-01
% ans = 7.3597e+05
datestr( datenum([1970,1,1,0,0,1420174800]), 0 )
% ans = 02-Jan-2015 05:00:00
因此,您可以将所有 unix 纪元转换为 datenums,例如像这样
DateNums = arrayfun( @(x) datenum([1970, 1, 1, 0, 0, x]), yy(:,1) )
然后改用 DateNums 绘图,并按预期使用 datetick。
上述解决方案在 Octave 和 Matlab 中的工作方式相同。
我有以下数据集:
octave:42> yy
yy =
1420174800.00000 21.70000 21.93000 21.64000 21.81000 1949882.00000
1420434000.00000 21.92000 22.23000 21.90900 22.17000 3189214.00000
1420520400.00000 22.15000 22.51000 22.08000 22.41000 4810496.00000
1420606800.00000 22.21000 22.27500 22.07000 22.11000 2397372.00000
1420693200.00000 21.93000 21.93600 21.70000 21.73000 2797149.00000
1420779600.00000 21.68000 21.98000 21.68000 21.90000 2377333.00000
1421038800.00000 21.88000 22.15000 21.87000 22.07000 2347871.00000
1421125200.00000 21.94000 22.30000 21.76500 22.15000 5255049.00000
1421211600.00000 22.40000 22.51900 22.24000 22.25000 5843980.00000
1421298000.00000 22.18000 22.48000 22.14000 22.47990 3498303.00000
如果我绘制它,我会得到以下图表:
octave:44> plot(yy(:,1), yy(:,5))
根据 Octave 文档 (https://octave.sourceforge.io/octave/function/datetick.html),我尝试了以下方法来显示年份而不是 UNIX 纪元秒值。
octave:48> plot(yy(:,1), yy(:,5))
octave:49> datetick('x','YYYY')
但这是结果:
我想学习如何显示年 (YYYY) 和年月 (YY-MM)。我不确定 Matlab 解决方案是否也适用于 Octave。
短版
plot( arrayfun( @(x) datenum([1970, 1, 1, 0, 0, x]), yy(:,1) ), yy(:,5) )
datetick( 'x', 'yyyy' )
说明
您拥有的数字是 unix 纪元(即自 1970-1-1 00:00:00 UTC 以来的秒数)。 你从 datetick 中得到奇怪数字的原因是因为它不期望 unix 纪元作为输入,而是“日期数字”(自 0000-1-0 00:00:00 UTC 以来的小数天数,无论那是什么意思)。
您可以做的是使用您的值通过 datevec 转换为 datenum。例如。您的第一个值,即 1420174800,可以像这样转换为 datenum
datenum([1970,1,1,0,0,1420174800]) % i.e. the 1420174800th second of 1970-01-01
% ans = 7.3597e+05
datestr( datenum([1970,1,1,0,0,1420174800]), 0 )
% ans = 02-Jan-2015 05:00:00
因此,您可以将所有 unix 纪元转换为 datenums,例如像这样
DateNums = arrayfun( @(x) datenum([1970, 1, 1, 0, 0, x]), yy(:,1) )
然后改用 DateNums 绘图,并按预期使用 datetick。
上述解决方案在 Octave 和 Matlab 中的工作方式相同。