如何在Matlab图中替换x轴?

时间:2017-10-25 20:23:11

标签: matlab graphics matlab-figure

在不影响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

谢谢!

non_shifted_axis shifted_axis

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

您必须在单元格中封装'XData' property名称,以便一次更新多个绘图对象。来自set文档:

  

set(H,NameArray,ValueArray)使用单元格数组NameArrayValueArray指定多个属性值。要在每个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));