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



我有一个 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

这将测试以下两个条件之一:

  1. 轴的Children为空,即轴中没有图形。因此,可以绘制datetime数据。
  2. 所有轴的Children都是datetime型的,因此可以绘制更多的datetime数据。

cell中使用{ax.Children}是因为轴的Children可能不适合一个常规数组,因为它们具有不同的类型或尺寸。

最新更新