2017-04-04 1 views
2

私はに(datetime, double)系列をプロットするmatlab関数を持っています。しかしplotAxisはすでに(double, double)シリーズが含まれている場合は、エラーを取得する:指定された軸にdatetime xaxisをプロットすることが可能かどうかを調べる

'Data inputs must match the axis configuration. A numeric axis must have numeric data inputs or data inputs which can be converted to double.'

私はplotAxis.XAxisを照会し、それがDatetimeRulerNumericRulerであるかどうかを調べることができます知っています。それが前者ならば、私は先に進み、プロットすることができます。それが後者であれば、私は正常に失敗することができます。しかし、新しい軸のXAxisプロパティのデフォルトタイプはNumericRulerで、この場合は系列がプロットされていないため、datetimeをプロットすることができます。

(datetime, double)がプロットできるかどうかを知るためにAxesオブジェクトが与えられています(もちろん、try/catchブロック以外)。

答えて

1

あなたがそれを記述する方法(と私が試した限り)は、ルーラーのクラスは何を探すべきではありません。データを含まない新しいプロットの場合、クラスはNumericRulerになります。この定規は問題なくdatetimeデータを受け入れます。ただし、軸に水平軸の非datetimeデータが含まれている場合、NumericRulerは他のデータ型とうまく反応せず、エラーが発生します。したがって、ルーラーのタイプをテストすることは、行く方法ではありません。

私はすでにのXDataに含まれるデータのタイプ(複数可)をテストすることをお勧めAxesのChildren

  1. 軸:これは、2つの条件のいずれかをテスト

    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データをプロットすることができます。

  2. すべての軸 'Childrendatetimeです。したがって、プロットするとdatetimeのデータが可能です。それらは異なる種類又は寸法であるので、軸Childrenが1つの規則的な配列に適合しない可能性があるため、

cell{ax.Children}の使用です。

+0

これはまさに私が探していたものです - ax.Childrenとchild.XData、ありがとう –

関連する問題