Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 生成具有等长向量的多个打印对象_Matlab_Plot - Fatal编程技术网

Matlab 生成具有等长向量的多个打印对象

Matlab 生成具有等长向量的多个打印对象,matlab,plot,Matlab,Plot,当plot与矢量和标量一起使用时,MATLAB将生成多个线对象: a = 1:4; ph = plot(a, 1, 'o'); numel(ph) % == 4 通常,希望绘图生成: 但是,我想为a和b中的每对值生成一个line对象 请注意,如果只有一行,则低级函数也不会为每列创建一行 那么,我如何才能强制MATLAB以优雅的方式生成numel(a)line对象呢 我能想到的最佳解决方案是使用arrayfun,并且需要额外的步骤将单元格数组转换为对象数组: hold on; ph = arra

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

a = 1:4;
ph = plot(a, 1, 'o');
numel(ph) % == 4
通常,希望
绘图
生成:

但是,我想为
a
b
中的每对值生成一个line对象

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

那么,我如何才能强制MATLAB以优雅的方式生成
numel(a)
line对象呢

我能想到的最佳解决方案是使用
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
s)。

如果我理解正确,您希望在一个plot命令中绘制两条(或任意数量)直线。如果是这样,您可以使用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)

谢谢,但这不是我要问的。事实上,使用
plot([x1(:)、x2(:)]、[y1(:)、y2(:)])
plot(x1,y1,'o',x2,y2,'x')
的标准绘图用法将生成两个绘图对象,无需
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)