plot
コマンドで複数のプロットオブジェクトを作成する場合、plot
が返すハンドルは実際にはan array of plot objects(プロットごとに1つ)です。このため
plots = plot(rand(2));
size(plots)
1 2
、あなたはは単にXData
に別の[2×2]行列を割り当てることはできません。
set(plots, 'XData', rand(2))
あなたは次の構文を経由してプロットに新しいのXDataのセル配列を渡すことができます。これは、すでにセル配列に新しい値がある場合にのみ便利です。
set(plots, {'XData'}, {rand(1,2); rand(1,2)})
その他のオプションは、各プロットオブジェクトを個別に新しい値で更新することです。これをすばやく実行する限り、MATLABがアイドル状態になるか、明示的にdrawnow
を呼び出すまで実際にレンダリングされないため、すべてを一度に設定しないとパフォーマンスが大幅に低下しません。
X = rand(2);
Y = rand(2);
for k = 1:numel(plots)
set(plots(k), 'XData', X(k,:), 'YData', Y(k,:))
end
% Force the rendering *after* you update all data
drawnow
あなたは本当にあなたが示されているXDataSource
とYDataSource
方法を使用する場合は、あなたが実際にこれを行うことができますが、各プロットオブジェクトの一意のデータソースを指定する必要があります。
% Do this when you create the plots
for k = 1:numel(plots)
set(plots(k), 'XDataSource', sprintf('X(%d,:)', k), ...
'YDataSource', sprintf('Y(%d,:)', k))
end
% Now update the plot data
X = rand(2);
Y = rand(2);
refreshdata(plots)
あなたは 'Nx2'行列であることを 'X'を設定しようとしたことがありますか? –
'drawnow'関数を使うことができます。 – obchardon
返信@Ander Biguriありがとう。私は次のコードを試してみましたが、2D配列ではなくベクトルのみを許可するようです。 'x(:、1)=(1:10); x(:、2)=(1:10); y(:、1)= 2 * x(:、1); y(:、2)= 5 * x(:、2); h = plot(x、y); %x、yに新しいデータを与えます。 セット(d1、 'XData'、x、 'YData'、y); ==>を使用するとエラーが発生します。値は列または行ベクトルでなければなりません。 " – bienle