Matlab 生成具有等长向量的多个打印对象
当plot与矢量和标量一起使用时,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
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)