使用相等长度的向量生成多个绘图对象

时间:2016-04-05 02:59:36

标签: matlab plot

当绘图与矢量和标量一起使用时,MATLAB将生成多个线对象:

a = 1:4;
ph = plot(a, 1, 'o');
numel(ph) % == 4

通常,plot需要生成single line object for x and y arguments being vectors of the same length

b = 1:2:8;
ph = plot(a, b, 'o');
numel(ph) % == 1

但是,我想为ab的每对值生成一个线对象。

请注意,如果只有一行,低级line函数也不会为每列创建一行。

那么如何强制MATLAB以优雅的方式生成numel(a)行对象?

我能提出的最佳解决方案是使用arrayfun并需要额外的步骤将单元格数组转换为对象数组:

hold on;
ph = arrayfun(@(x, y) plot(x, y, 'o'), a, b, 'uni', 0)
ph = cat(2, ph{:});

(优雅意味着:没有循环。此外,scatter对我不起作用,因为它不允许使用不同的标记类型)

编辑:

第二个最佳解决方案可能是

ph = plot([a;nan(size(a))], [b;nan(size(a))], 'o')

这将生成四个行对象,但代价是需要额外的NaN个数据元素。请注意,必须将NaN添加到两个参数中,否则将只有两个线系列(第二个是不可见的,仅包含一个坐标的NaN。)

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您想在一个绘图命令中绘制两个(或任意数字)线。如果是这样,您可以使用cellfun和输入单元格数组,请参见下面的示例:

x1 = 1:100;
x2 = 1:2:200;
y1 = rand(1,100);
y2 = rand(1,100);
X = {x1,x2};
Y = {y1,y2};
figure(1)
hold on
cellfun(@plot, X, Y)