0

我有一个文件,其中包含

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

其中第一列是纪元时间。

我正在使用

load('path to file')

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

1.349542114842000e+12

这对我来说会很困惑,因为当我绘图时,我的轴值是非常倾斜的纪元时间。有任何想法吗 ??(我能想到的技巧是在绘图时减去 e+3 但这并不能完全解决我的问题)

4

3 回答 3

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
于 2012-10-09T06:38:09.897 回答
2

您的时代看起来像unix 时间戳,以毫秒为单位。您可以将这些转换为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')

结果是:

不错的标签

或者,如果您希望它们在x-axis 上,您可能需要旋转标签。你最好不要在文件交换中使用这个实用程序,因为手工操作是一件很痛苦的事情(而且是 Matlab 应该开始原生支持恕我直言)。

于 2012-10-09T07:24:07.183 回答
1

如果问题是绘图的 yaxis 没有显示完整的数字(例如,1.35e12而不是13495421148401349542114870),您可以使用此工具更改格式:http: //www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat

例子:

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

结果:

在此处输入图像描述

于 2012-10-09T06:39:07.723 回答