如何在Matlab图中更换X轴?

3

我需要使用哪些命令在不影响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

谢谢!

未移动的坐标轴 移动后的坐标轴

2个回答

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

3
您需要将 'XData' 属性 的名称封装在单元格中,以便同时更新多个绘图对象。从 set 文档中可以得知:

set(H,NameArray,ValueArray) 使用单元格数组 NameArrayValueArray 指定多个属性值。要在每个 m 个图形对象上设置 n 个属性值,请将 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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接