matlab,符号未在图例中更新

时间:2013-11-05 17:21:10

标签: matlab symbols legend matlab-figure

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

我尝试发布图片,但是我没有足够高的声誉。所以我将尝试详细解释图表。绘制两组点(两个不同大小的矩阵)。曲线由用户标记,在本例中它们是:“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循环中绘制它。

非常感谢任何建议和意见。

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

enter image description here

1 个答案:

答案 0 :(得分: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)

你可能想要对传奇做些不同的事情,但希望这会让你开始。 plot with legend created using handles