代码之家  ›  专栏  ›  技术社区  ›  ggkmath

在for循环中为Matlab绘图创建图例

  •  1
  • ggkmath  · 技术社区  · 14 年前

    我想画几条曲线,每条都有不同的长度。所以,我将每条曲线作为数组放在单元格索引Y中(这允许我在FOR循环中索引不同大小的数组)。我使用下面的“hold all”使FOR循环的每次迭代都能在同一个图中绘制单元格数组Y中的每个新数组。

    hold all;
    for i = 1:1:length(maxusers)
      time = increment*(0:1:length(Y{i})-1);
      plot(time,Y{i,1,:});
    end
    

    虽然在这里使用单元格数组确实简化了在Y中绘制各种曲线的过程,但我遇到的问题是创建图例。目前我正在使用一个非常长/难看的switch语句来覆盖所有可能的场景,但是 认为 应该有一个更优雅的解决方案。

    如果我有一个数组(例如,maxusers=4),它是:

     filesize = [10 100 200 300];
    

    我知道legend Matlab命令的作用是:

    legend(num2str(filesize(1)),num2str(filesize(2)),num2str(filesize(3)),num2str(filesize(4)));
    

    但是当曲线的数量是maxusers给定的变量时,我就无法创建一个legend命令。有什么想法吗?提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  10
  •   gnovice    14 年前

    试试这个:

    >> filesize = [10 100 200 300];
    >> str = strtrim(cellstr(int2str(filesize.')))  %'# Create a cell array of
                                                    %#    strings
    str = 
    
        '10'
        '100'
        '200'
        '300'
    
    >> legend(str{:});  %# Pass the cell array contents to legend
                        %#   as a comma-separated list