我有一个matlab函数,可以将(datetime, double)
系列绘制到提供的轴plotAxis
上。但是,如果plotAxis
已包含(double, double)
系列,则会收到错误消息:
'数据输入必须与轴配置匹配。必须是数字轴 具有可转换为的数字数据输入或数据输入 双'。
我知道我可以查询plotAxis.XAxis
并查看它是DatetimeRuler
还是NumericRuler
。如果是前者,那么我可以继续进行策划,否则如果是后者,那么我可以优雅地失败。但是,似乎新轴的XAxis
属性的默认类型也是NumericRuler
,在这种情况下,您可以在其上绘制datetime
(可能是因为没有其他现有(double, double)
1}}系列绘制)。
是否有一般方法,给定一个轴对象,以确定是否可以在其上绘制(datetime, double)
(当然,除了try
/ catch
块之外)?
答案 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
这可以测试两种情况之一:
Children
为空,即轴中没有图形。因此,可以绘制datetime
数据。Children
属于datetime
类型,因此可以绘制更多datetime
数据。在{ax.Children}
中使用cell
是因为轴' Children
可能不适合一个常规数组,因为它们具有不同的类型或维度。