加载存储在文件中的纪元时间和在matlab上绘图

时间:2012-10-09 04:05:49

标签: matlab plot epoch

我有一个包含

的文件
1349542114842,2
1349542114872,4
1349542116037,1
1349542126680,5
1349542190738,3
1349542190775,4

其中第一列是纪元时间。

我使用

将其加载到matlab中
load('path to file')

加载后我可以看到第一列正在更改为显示

1.349542114842000e+12

这对我来说非常混乱,因为当我绘制时,我的轴值是一个非常偏斜的纪元时间。 有任何想法吗 ?? (我能想到的黑客是在绘图时减去e + 3,但它并没有完全解决我的问题)

3 个答案:

答案 0 :(得分:3)

如果第一列确实包含非负整数值,您可以将其强制转换为uint64以获得完全精度:

format long % just for display purpose: 

% with double precision
a = [
    1349542114842,2
    1349542114872,4
    1349542116037,1
    1349542126680,5
    1349542190738,3
    1349542190775,4
    ];

这导致

>> a

a =

  1.0e+012 *

   1.349542114842000   0.000000000002000
   1.349542114872000   0.000000000004000
   1.349542116037000   0.000000000001000
   1.349542126680000   0.000000000005000
   1.349542190738000   0.000000000003000
   1.349542190775000   0.000000000004000

现在转换为uint64:

% now with unsigned integer 64 precision
a = uint64([
    1349542114842,2
    1349542114872,4
    1349542116037,1
    1349542126680,5
    1349542190738,3
    1349542190775,4
    ]);

这导致:

>> a

a =

        1349542114842                    2
        1349542114872                    4
        1349542116037                    1
        1349542126680                    5
        1349542190738                    3
        1349542190775                    4

答案 1 :(得分:2)

您的纪元看起来像unix time stamps,精确到毫秒。您可以将这些转换为datenums

a = [
1349542114842,2
1349542114872,4
1349542116037,1
1349542126680,5
1349542190738,3
1349542190775,4
];

b = a(:,1)/1000/86400 + datenum(1970,1,1);

然后用它来制作情节。您可以正确显示它们:

datetick('y', 'mmm dd, HH:MM:SS')

结果如下:

nice y labels

或者,如果您希望它们位于x - 轴上,您可能需要旋转标签。你最好使用this utility off the file exchange,因为手工操作是一个真正的痛苦(Matlab应该开始支持本地恕我直言)。

答案 2 :(得分:1)

如果问题是情节的y轴没有显示完整数字(例如1.35e12而不是13495421148401349542114870等),您可以使用此工具更改格式:{{ 3}}

示例:

plot(1:10, (1:10) + 1e12);
ticklabelformat(gca,'y','%d')

结果:

enter image description here