循环中的Matlab图例

rnmwe5a2  于 2022-12-13  发布在  Matlab
关注(0)|答案(1)|浏览(229)

我有一个脚本,加载几个csv's,并在一个循环中绘制它们(为简洁起见,此代码示例被排除在外),但我在用图例标记数据时遇到了麻烦。

if var1() - 1 == 0 
          lgd = legend([txttitle],'interpreter','none');
        else 
          lgd = legend(lgd,[txttitle],'interpreter','none');
          title(lgd,'My Legend Title')
        end

它适用于第一个csv,但只会出图第二个档案,其中的图例(name?)为“data1”,并显示此错误:

Error using legend (line 184)
Handle inputs of type Legend cannot be used with this function.

Error in scriptname (line 27)
                lgd = legend(lgd,[txttitle],'interpreter','none');

如果我注解掉else语句和下面的行,它会绘制所有数据,但只会用适当的名称标记第一个图,而其余的图则标记为data1、data2等。因此,我认为这是一个语法问题,我无法完全理解它
注意:[txttitle]是数据文件的名称,因此我希望图例说明的内容。

vsnjm48y

vsnjm48y1#

在这些情况下,使用plotDisplayName属性(以及大多数绘图函数),然后在循环之前/之后调用legend一次,通常会更容易。例如:

N = 3; % number of lines
data = sort( rand( 10, N ) ); % some random data

% Create figure and hold on for multiple plots
figure(); hold on;
% Loop over the data and plot
for ii = 1:N
   % Generate the name somehow
   txttitle = sprintf( 'Line Number %d', ii );
   % Plot with display name
   plot( data(:,ii), 'DisplayName', txttitle );
end
% Show the legend
legend( 'show', 'interpreter', 'none', 'location', 'best' );

输出量:

相关问题