我正在以典型的MATLAB散点图格式绘制数据。通常,在绘制多个数据集时,我会使用命令"hold on;",然后绘制每个数据,然后绘制这个来得到我的图例:
legend('DataSet1', 'DataSet2') % etcetera
但是,我在同一轴上绘制的(多个)数据集不一定每次都是相同的数据集。我在同一轴上绘制多达六组不同的数据集,并且可以显示这些数据集的任意组合(取决于用户选择显示的内容)。显然,如果我想以传统方式设置传奇,那将是很多其他事情。
我真正想做的是在绘制每个数据集时为其分配一个名称,以便之后我可以调用显示的所有数据的图例。
。或者,任何人都可以想到的任何其他解决方案..?
您应该能够为每个绘图设置 DisplayName 属性:
figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')
http://www.mathworks.com/help/matlab/ref/line_props.html
旁注:我发现了很多这样的小技巧,通过让图形看起来像我想要的样子,然后选择图形的"文件"菜单选项"生成 M 文件..."并检查生成的输出代码。
一种选择是利用'UserData'
属性,如下所示:
figure;
hold on
plot([0 1], [1 0], '-b', 'userdata', 'blue line')
plot([1 0], [1 0], '--r', 'userdata', 'red dashes')
% legend(get(get(gca, 'children'), 'userdata')) % wrong
legend(get(gca, 'children'), get(get(gca, 'children'), 'userdata')) % correct
编辑:正如提问者指出的那样,原始版本可能会出现故障。 若要解决此问题,请指定哪个句柄与哪个标签一起使用(在固定版本中,它的顺序正确)。
将'DisplayName'
用作plot()
属性,并将图例称为
legend('-DynamicLegend');
我的代码如下所示:
x = 0:h:xmax; %// get an array of x-values
y = someFunction; %// function
plot(x, y, 'DisplayName', 'Function plot 1'); %// plot with 'DisplayName' property
legend('-DynamicLegend',2); %// '-DynamicLegend' legend
来源:http://undocumentedmatlab.com/blog/legend-semi-documented-feature/
您可以尝试如下操作
for k = 1:10
h(k) = plot(...);
name{k} = ['condition ' num2str(k)];
end
legend(h, name);
做一个 for 循环。但在 for 循环之前,创建一个数组。
%for example
legendset = {}
for i = 1:10
%blabla
%Then in the fore loop say:
legendset = [legendset;namedata(i)]
%It puts all names in a column of legendset.
%Make sure namedata are characters.
%foreloop ends
end
%Then after the foreloop say:
legend(legendset).