1

例如,假设我有一个带有 colheaders(<1x6 单元格>)的以下矩阵(<9x6 double>)。

 Matrix =

   226.7431   14.7437   14.9417   14.1000   14.5000       66.0590   
   226.7500   14.6582   14.8250       NaN   14.2000       66.7740   
   226.7569   14.3590   14.6067       NaN   13.9000       68.4897   
   226.7639   14.2702   14.5717   13.4000   13.8000       68.2487   
   226.7708   14.2555   14.6000       NaN   14.0000       NaN        
   226.7778   14.1605   14.5967       NaN   13.9000       NaN      
   226.7847   14.0320   14.4567   12.9000   13.6000       68.8272   
   226.7917   13.8422   14.2733       NaN   13.4000       69.6392   
   226.7986   13.6585   14.1169       NaN   13.1000       69.8048   

我想在带有子​​图的 matlab 图中在 x 轴上绘制矩阵的第一列,在 y 轴上绘制其余的列(假设一个图中为 3)。手动我可以做这样的事情,一个数字等等。

figure
subplot(3,1,1)
plot(Matrix(:,1),Matrix(:,2),'ro'); grid on; box on; xlabel('A');ylabel('B')
subplot(3,1,2)
plot(Matrix(:,1),Matrix(:,3),'bo'); grid on; box on; xlabel('A');ylabel('C')
subplot(3,1,3)
plot(Matrix(:,1),Matrix(:,4),'go'); grid on; box on; xlabel('A');ylabel('D')
and so on.....
......
......

现在开始一个棘手的部分,我需要像你们这样的专家的帮助。我不想手动绘制我的矩阵,因为它包含 200 列。所以我想做一个矩阵的自动绘图,以便它在子图中绘制矩阵的每一列。但是 200 个子图不能出现在一个数字中,因此它会在子图限制后自动开始一个新数字(比如说 3)。除此之外,我还需要使用头文件“colheaders”自动定义“xlabel、ylabel、legend”。可能吗?

4

2 回答 2

3
x = rand(10, 200);
myYLabel = char(64+randi(26, 200, 1));

nrows = 3;
ncols = 2;
for ii = 1:size(x, 2)
    if nrows*ncols-mod(-ii, nrows*ncols) == 1
        figure;
    end
    subplot(nrows, ncols, nrows*ncols-mod(-ii, nrows*ncols));
    plot(x(:, ii));
    ylabel(myYLabel(ii, :));
end
于 2013-09-26T16:45:39.593 回答
1

这似乎是一个简单的 for 循环任务。

我假设您知道每个图中需要多少子图(比如说 3)。

A = yourdatamatrix;   
header = [{'A'}, {'B'}, {'C'}, {'D'}, {'E'}, {'F'}];
n = 6 %number of columns

i_figure = 1;


for ii=1:3:n-3
    figure(ii)
    subplot(3,1,1)
    plot(A(:,1),A(:,ii+1),'ro'); grid on; box on; xlabel(header(1));ylabel(header(ii+1))
    subplot(3,1,2)
    plot(A(:,1),A(:,ii+2),'bo'); grid on; box on; xlabel(header(1));ylabel(header(ii+2))
    subplot(3,1,3)
    plot(A(:,1),A(:,ii+3),'go'); grid on; box on; xlabel(header(1));ylabel(header(ii+3))
end

我假设你也不关心你的数字,否则只需实现另一个计数器。另请注意,您的列数+1 可被 3 整除。

于 2013-09-26T16:41:40.570 回答