【问题标题】:How to update multiple graphs from one plot in one statement in Matlab?如何在 Matlab 的一个语句中从一个图中更新多个图形?
【发布时间】:2013-08-26 15:29:27
【问题描述】:

我有这样的事情:

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 数据,每对都有一个值。

我得到的错误是:无法从单元格转换为双精度。

【问题讨论】:

  • 你想对情节做什么?你得到什么错误?
  • 向图表添加更多值并刷新图表。
  • 如果您想手动绘制包括添加在内的数据,您能否举一个(工作)示例说明如何生成结果?
  • 当然,最初我有 2 个图表:G1: x: 0, 1 | y: 0, 1 G2: x: 1, 2 | y: 1, 2 添加后: G1: x: 0, 1, 2 | y:0、1、2 G2:x:1、2、3 | y: 1, 2, 3

标签: matlab plot cell-array


【解决方案1】:

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

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,属性字符串放在元胞数组中,XY都是2×1元胞数组。

【讨论】:

  • 这就是您使用元胞数组输入调用set 的方式... :-)
  • 感谢您的回答,我理解并且我不想抨击该语言,因为我不是很有经验,但我觉得文档不是那么好,而且大多数时候我觉得我我用左手挠我的右耳。
【解决方案2】:

尝试重绘情节:

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{:})

【讨论】:

  • "数据必须是单个矩阵 Y 或 X、Y 对的列表" 另外我想将值添加到图表中,我不想将它们展平为一个。
  • “向量的长度必须相同。”
  • 糟糕,忘记从 plot 命令中删除句柄 p。请重试。
  • 它似乎适用于您编写的上述示例,但对于“p = plot([0 1 1], [0 1 0], [5 6 6], [5 6 5]) ;"没那么好。
  • 为什么不呢?它根据需要为每个单元格数组添加一个值,不是吗?
猜你喜欢
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多