2

我正在创建一个程序,用户可以在其中选择多个文件来绘制和比较数据。该程序可以正确绘制数据,我遇到的问题在图例中。

我尝试发布图片,但我没有足够高的声誉。因此,我将尝试详细解释该图。绘制了两组点(两个不同大小的矩阵)。曲线由用户标记,在本例中它们是:“PS,Cs”和“PS,Po”。

该程序成功地用红色方块绘制了“PS,Cs”曲线,然后用蓝色圆圈绘制了“PS,Po”,但是图例继续显示两组点的红色方块。下面是执行绘图的代码中的循环。

fig = small_group_struct;

mystyles = {'bo','rs','go'};
mat_len = size(small_group_struct,2);
for q = 1:mat_len
    plotstyle = mystyles{mod(q,mat_len)+1};
    semilogy(1:size(small_group_struct(1).values),small_group_struct(q).values,plotstyle);
    hold all;        
    [~,~,~,current_entries] = legend;
    legend([current_entries {small_group_struct(q).name}]);
end
hold off;
%legend(small_group_struct.values,{small_group_struct.name});

我见过的其他线程建议将 plot 命令放入句柄中,但由于每组点都是不同大小的 nxm 矩阵,因此程序不喜欢这样。

此外,如开头所述,用户将选择文件的数量,虽然这通常是两个,但并非总是如此,以及为什么我试图在 for 循环中绘制它。

任何建议和意见将不胜感激。

编辑:我现在有足够高的声誉来发布图片,所以这是图表的截图

在此处输入图像描述

4

1 回答 1

1

您可以使用句柄来指定哪些标签与图例中的哪些数据一起使用。

你说“每组点都是一个不同大小的 nxm 矩阵”。绘制mxn矩阵会创建n线对象并返回n句柄。您可以在创建图例时跟踪所有这些句柄并为其分配标签。

这是一个例子:

% Cell array of data. Each element is a different size.
data = {rand(100, 1), rand(150, 2)};
styles = {'ro', 'gs'};

% Vector to store the handles to the line objects in.
h = []; 

figure
hold on

for t = 1:length(data)
    % plots the data and stores the handle or handles to the line object. 
    h = [h; semilogx(data{t}, styles{t})]; 
end

% There are three strings in the legend because a total of three columns of data are
% plotted. One column of data is from the first element of data, two columns of data
% are from the second element of data. 
strings = {'data1' ,'data2', 'data3'};
legend(h,strings)

您可能想对图例做一些不同的事情,但希望这能让您开始。 绘制使用句柄创建的图例

于 2013-11-07T21:45:27.280 回答