Matlab 了解是否可以将日期时间X轴绘制到给定轴

Matlab 了解是否可以将日期时间X轴绘制到给定轴,matlab,datetime,plot,matlab-figure,Matlab,Datetime,Plot,Matlab Figure,我有一个matlab函数,它可以将(datetime,double)系列绘制到提供的轴上plotAxis。但是,如果plotAxis已包含(双精度,双精度)系列,则会出现错误: '数据输入必须与轴配置匹配。必须使用数字轴 具有数字数据输入或可转换为的数据输入 加倍。” 我知道我可以查询plotAxis.XAxis并确定它是DatetimeRuler还是numeriruler。如果是前者,那么我可以继续策划;如果是后者,那么我可以优雅地失败。但是,新轴的XAxis属性的默认类型似乎也是Numeri

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

'数据输入必须与轴配置匹配。必须使用数字轴 具有数字数据输入或可转换为的数据输入 加倍。”

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

给定Axis对象,是否有一种通用方法来确定是否可以在其上绘制
(datetime,double)
(当然,除了
try
/
catch
块)

您描述它的方式(就我所测试的而言)标尺的类别不是要寻找的。对于不包含任何数据的新绘图,该类可以是
NumericRuler
。然后,此标尺可以毫无问题地接受
datetime
数据。但是,当轴包含横轴上的非datetime数据时,
NumericRuler
将无法很好地处理其他数据类型并抛出错误。因此,测试标尺类型不是一条可行之路

我建议测试轴的子项的扩展数据中已经包含的数据类型:

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
这将测试两种情况之一:

  • 轴的子项为空,即轴中没有图形。因此,可以绘制
    datetime
    数据
  • 所有轴的
    子项
    都属于
    日期时间
    类型,因此可以绘制更多的
    日期时间
    数据

  • 单元格中使用
    {ax.Children}
    是因为轴的
    子对象
    可能不适合于一个常规数组,因为它们的类型或维度不同;这正是我想要的-ax.Children和child.XData,谢谢