0

我有这样的事情:

p = plot([0 1], [0 1], [1 2], [1 2]);

我想拿每一对并附加另一个数字。

x = get(p, 'XData');
y = get(p, 'YData');

x1 = mat2cell([x{1} double(2)]);
y1 = mat2cell([y{1} double(2)]);

x2 = mat2cell([x{2} double(3)]);
y2 = mat2cell([y{2} double(3)]);

set(p, 'XData', [x1; x2], 'YData', [y1; y2]); % this does not work

drawnow;

'get' 以某种格式给我一些数据,我以相同的格式'设置'-ing 数据,每对都有一个值。

我得到的错误是:从单元格转换为双精度是不可能的。

4

2 回答 2

1

尝试重绘情节:

xcoor = cellfun(@horzcat, get(p, 'XData'), {2; 3}, 'UniformOutput', false);
ycoor = cellfun(@horzcat, get(p, 'YData'), {2; 3}, 'UniformOutput', false);
c = [xcoor; ycoor];
plot(c{:})
于 2013-08-26T15:40:17.377 回答
1

有许多不同的方法可以获取当前的绘图点并添加到它们。Eitan 回答的前两行(使用cellfun)是一种方式。这是一个使用cell2matand num2cell

newX = [2 3];  % New x values to add
newY = [2 3];  % New y values to add
X = num2cell([cell2mat(get(p,'XData')) newX(:)], 2);
Y = num2cell([cell2mat(get(p,'YData')) newY(:)], 2);

set在文档摘录中说明了在多个句柄上使用该函数时要注意的关键问题:

set(H,pn,MxN_pv) 在 m 个图形对象的每一个上设置 n 个属性值,其中 m = length(H),n 等于元胞数组 pn 中包含的属性名称的数量。这允许您将给定的一组属性设置为每个对象上的不同值。

因此,您的单次调用必须set如下所示:

set(p, {'XData'}, X, {'YData'}, Y);

请注意,length(p)等于 2,属性字符串放置在元胞数组中,并且X每个Y都是 2×1 元胞数组。

于 2013-08-26T17:11:09.557 回答