找出是否可以将日期时间x轴绘制到给定轴

时间:2017-04-04 12:08:26

标签: matlab datetime plot matlab-figure

我有一个matlab函数,可以将(datetime, double)系列绘制到提供的轴plotAxis上。但是,如果plotAxis已包含(double, double)系列,则会收到错误消息:

  

'数据输入必须与轴配置匹配。必须是数字轴   具有可转换为的数字数据输入或数据输入   双'。

我知道我可以查询plotAxis.XAxis并查看它是DatetimeRuler还是NumericRuler。如果是前者,那么我可以继续进行策划,否则如果是后者,那么我可以优雅地失败。但是,似乎新轴的XAxis属性的默认类型也是NumericRuler,在这种情况下,您可以在其上绘制datetime(可能是因为没有其他现有(double, double) 1}}系列绘制)。

是否有一般方法,给定一个轴对象,以确定是否可以在其上绘制(datetime, double)(当然,除了try / catch块之外)?

1 个答案:

答案 0 :(得分:1)

你描述它的方式(以及我测试过的)标尺的类不是要寻找的。对于不包含任何数据的新绘图,该类可以是NumericRuler。然后,此标尺可以毫无问题地接受datetime数据。但是,当轴在水平轴上包含非datetime数据时,NumericRuler将无法与其他数据类型很好地匹配并抛出错误。因此,测试标尺类型不是一种方法。

我建议测试已经包含在XData轴中的数据类型' Children

ax = gca;
if all(cellfun(@(x) isempty(x) || isdatetime(x.XData), {ax.Children}))
    % Ok to plot datetime
else
    % Not ok to plot datetime, it will throw an error
end

这可以测试两种情况之一:

  1. 轴' Children为空,即轴中没有图形。因此,可以绘制datetime数据。
  2. Alls the axes' Children属于datetime类型,因此可以绘制更多datetime数据。
  3. {ax.Children}中使用cell是因为轴' Children可能不适合一个常规数组,因为它们具有不同的类型或维度。