2017-10-25 6 views
3

y軸の値に影響を与えずに、開いているMatlabの図のx軸の値をシフトするためにはどのようなコマンドが必要ですか? (以下の画像に示されるように)Matlabフィギュアのx軸を置き換える方法は?

私の最高の推測では、これまでのところです:

Error using matlab.graphics.chart.primitive.Line/set 
While setting the 'XData' property of Line: 
Value must be a vector of numeric type 

ありがとう:私にエラーを与える

LineH = get(gca, 'Children'); 
x = get(LineH, 'XData'); 
y = get(LineH, 'YData'); 

offset=20; 

nx = numel(x); 
for i=1:nx 
    x_shifted{i} = x{i} + offset; 
end 

set(LineH,'XData',x_shifted') 

non_shifted_axis shifted_axis

答えて

3

一度に複数のプロットのオブジェクトを更新するために、セル内の'XData' property名前をカプセル化する必要があります。 setドキュメントから:

set(H,NameArray,ValueArray) specifies multiple property values using the cell arrays NameArray and ValueArray . To set n property values on each of m graphics objects, specify ValueArray as an m -by- n cell array, where m = length(H) and n is equal to the number of property names contained in NameArray .

だからあなたのエラーを修正するために、あなただけのこの最後の行に変更する必要があります。

set(LineH, {'XData'}, x_shifted'); 

をそして、あなたが興味があるなら、ここでは代わりにcellfunを使用するソリューションですループの:

hLines = get(gca, 'Children'); 
xData = get(hLines, 'XData'); 
offset = 20; 

set(hLines, {'XData'}, cellfun(@(c) {c+offset}, xData)); 
3

どうやらあなたはセル配列と同時に、すべての行の'XData'プロパティを設定することはできません。

編集することができます。 @gnovice's answerを参照してください。あなたは何ができるか

はちょうどループにset文を移動している:

LineH = get(gca, 'Children'); 
x = get(LineH, 'XData'); 
y = get(LineH, 'YData'); 

offset=20; 

nx = numel(x); 
for i=1:nx 
    x_shifted{i} = x{i} + offset; 
    set(LineH(i),'XData',x_shifted{i}); % set statement with index i 
end 
関連する問題