在不影响y轴值的情况下,我需要用什么命令在一个打开的Matlab图形中移动x轴值?(如下图所示)
到目前为止,我最好的猜测是:
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')
这就给了我一个错误:
Error using matlab.graphics.chart.primitive.Line/set
While setting the 'XData' property of Line:
Value must be a vector of numeric type
谢谢!
最佳答案
必须将'XData'
property名称封装在单元格中,才能一次更新多个打印对象从set
文档中:set(H,NameArray,ValueArray)
使用单元格数组NameArray
和ValueArray
指定多个属性值要在每个n
图形对象上设置m
属性值,请将ValueArray
指定为m
-by-n
单元格数组,其中m = length(H)
和n
等于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));