我有一个名为Reach1到Reach7
的变量列表(不同大小的数字矩阵)我想将它们全部绘制成一个图中的子图。
需要循环遍历每个变量,如下所示:
names = {'Reach1' 'Reach2' 'Reach3' 'Reach4' 'Reach5' 'Reach6' 'Reach7'};
for index = 1:7
subplot(3,3,index)
plot(names(index)(:,1),names(index)(:,2));hold on;
plot(names(index)(:,5),names(index)(:,6));
plot(names(index)(:,9),names(index)(:,10));hold off;
end
在matlab中有更好的方法吗?
答案 0 :(得分:0)
您无法访问names(index)
,因为它是cell
数组,而names{index}
可以访问这些数据。
如果您想通过调用Reach1(1,3)
来访问变量names{1}(1,3)
,那么您将失败,因为Matlab会(尝试)将a
作为char
数组的元素返回。这种方法可以通过eval实现,但 NOT 可以做到这一点!它有很多drawbacks并没有任何好处。
您可以使用Matlabs功能简化代码,这些功能并不明显但很有用。
假设我们在一个单元格数组Reaches={<Reach1>;<Reach2>;...}
中包含所有矩阵:
Reaches={rand(4,12);rand(6,12);rand(8,12);rand(2,12);rand(9,12)}; %declare dummy variables
counter=0;
for Reach=Reaches
counter=counter+1;
subplot(3,3,counter);
plot(Reach(:,[1,5,9]),Reach(:,2,6,10));
end
此代码受益于:
在此示例中,相应的元素names{ii}
传递给Reach
变量,计数器counter
已提前,plot
由矩阵包含第1,5和9列和第2列支持,6和10分别为x和y值。