我正在创建一个程序,用户可以选择多个文件来绘制和比较数据。该程序可以正确绘制数据图形,我遇到的问题是在图例中。
我尝试发布图片,但是我没有足够高的声誉。所以我将尝试详细解释图表。绘制两组点(两个不同大小的矩阵)。曲线由用户标记,在本例中它们是:“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循环中绘制它。
非常感谢任何建议和意见。
编辑:我现在有足够的声誉来发布图片,所以这里是图表的截图
答案 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)
你可能想要对传奇做些不同的事情,但希望这会让你开始。