我有一个 matlab 函数,可以将(datetime, double)
序列绘制到提供的轴plotAxis
上。但是,如果plotAxis
已包含(double, double)
系列,则会出现错误:
"数据输入必须与轴配置匹配。数值轴必须 具有数字数据输入或可转换为的数据输入 双倍。
我知道我可以查询plotAxis.XAxis
并找出它是DatetimeRuler
还是NumericRuler
。如果是前者,那么我可以继续策划,否则如果是后者,那么我可以优雅地失败。但是,似乎新轴的 XAxis
属性的默认类型也是NumericRuler
,在这种情况下,您可以在其上绘制datetime
(大概是因为没有绘制其他现有的(double, double)
序列(。
给定一个轴对象,是否有一种通用方法来确定是否可以在其上绘制(datetime, double)
(当然,除了try
/catch
块(?
你描述它的方式(以及据我测试(尺子的阶级不是要寻找的东西。可以为不包含任何数据的新图NumericRuler
该类。然后,此标尺可以毫无问题地接受datetime
数据。但是,当轴在水平轴上包含非datetime
数据时,NumericRuler
将无法很好地与其他数据类型配合并引发错误。因此,测试标尺类型不是要走的路。
我建议测试轴Children
XData
中已经包含的数据类型:
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
数据。
在cell
中使用{ax.Children}
是因为轴的Children
可能不适合一个常规数组,因为它们具有不同的类型或尺寸。