【问题标题】:How to plot datetime in x axis in MATLAB or Octave如何在 MATLAB 或 Octave 中的 x 轴上绘制日期时间
【发布时间】:2017-07-18 19:13:02
【问题描述】:

在 MATLAB 或 Octave 中,我的数据具有以下日期/时间值格式:

2017 年 2 月 26 日上午 12:00:34.626

它是 HH:MM:SS:SSS [A 或 P]M [M]M/DD/YYYY

我想在我的绘图中将它用于我的 x 轴,我尝试使用 datetickdatenumdatestr 和无法让它们中的任何一个使用这种格式。

如何使用这个格式化的值字符串来标记我的 x 轴数据点?

【问题讨论】:

    标签: matlab date datetime plot octave


    【解决方案1】:

    我会使用这些函数的组合,即 datnum 后跟 datetick

    首先,您的格式化字符串必须是:'HH:MM:SS.FFF AM mm/dd/yyyy'。

    如果您需要更改格式,请参阅以下内容: https://au.mathworks.com/help/releases/R2016b/matlab/ref/datenum.html#inputarg_formatIn

    然后使用 datetick 在绘图上转换为漂亮的格式。 https://au.mathworks.com/help/releases/R2016b/matlab/ref/datetick.html

    所以对于单个数据点 = 您可能拥有的图:

    xdatestr=['12:00:34.626 AM 2/26/2017'; '12:00:34.626 PM 2/26/2017']
    xdatenum=datenum(xdatestr,'HH:MM:SS.FFF AM mm/dd/yyyy')
    plot(xdatenum,[0 1])
    datetick(gca)
    

    另请注意datetime,是完全独立的方式,并使用不同的格式字符串约定。 http://au.mathworks.com/help/matlab/ref/datetime.html

    【讨论】:

      【解决方案2】:

      您可以使用以下格式:

      d = datetime('12:00:34.626 AM 2/26/2017','InputFormat','hh:mm:ss.SSS a M/dd/yyyy')
      

      结果:

      d = 
         26-Feb-2017 00:00:34
      

      如果您还想查看几分之一秒:

      >> d.Second
      ans =
             34.626
      

      对于多个日期字符串,存储在一个元胞数组中,只需将上面的字符串'12:00:34.626 AM 2/26/2017'替换为元胞数组即可。

      然后您只需编写plot(d,y)(其中y 是您的数据),您就可以得到时间格式的x 轴。您可以使用DatetimeTickFormat 属性进一步自定义此格式:

      plot(d,1,'DatetimeTickFormat','hh:mm:ss.SSS a M/dd/yyyy')
      

      你会得到:

      另请参阅 herehere

      【讨论】:

      • 日期时间未在 Octave 中定义
      • 我不使用 Octave。您编写了 MATLAB Octave。
      【解决方案3】:

      另一个例子是这个。

      date={'12:00:34.600 AM 2/26/2017','12:00:34.700 AM 2/26/2017','12:00:34.800 AM 2/26/2017','12:00:34.900 AM 2/26/2017'};
      timeFormat='HH:MM:SS.FFF AM mm/dd/yyyy';
      xdatenum=datenum(date,timeFormat);
      data=0:3;
      plot(xdatenum,data)
      datetick('x',timeFormat,'keepticks')
      view([-20,90])
      

      我稍微倾斜了绘图以避免 x 刻度重叠。

      您可以使用刻度属性来控制刻度数。

      date={'12:00:34.600 AM 2/26/2017','12:00:34.700 AM 2/26/2017','12:00:34.800 AM 2/26/2017','12:00:34.900 AM 2/26/2017'};
      timeFormat='HH:MM:SS.FFF AM mm/dd/yyyy';
      xdatenum=datenum(date,timeFormat);
      data=0:3;
      plot(xdatenum,data)
      datetick('x',timeFormat,'keepticks')
      set(gca,'XTick',[min(xdatenum) max(xdatenum)])
      set(gca,'XTickLabel',[date(1),date(end)])
      

      在这里,我只打了两个刻度,分别是最小日期和最大日期。

      【讨论】:

        猜你喜欢
        • 2015-08-16
        • 2016-06-24
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多