MATLAB图形绘制:在绘制过程中为图例标签赋值

10

我正在以典型的MATLAB散点图格式绘制数据。通常情况下,在绘制多个数据集时,我会使用命令“hold on;”,然后绘制每个数据,最后使用以下命令获得图例:

legend('DataSet1', 'DataSet2') % etcetera

然而,我正在绘制在同一坐标轴上的(多个)数据集不一定是每次相同的数据集。我在同一坐标轴上绘制了多达六组不同的数据,并且可以显示其中任意组合(取决于用户选择显示什么)。显然,如果我想要以传统方式设置图例,那将会是很多if语句。

实际上,我真正想做的是在绘制每个DataSet时为其分配一个名称,以便之后可以调用所有正在显示的数据的图例。

...或者,任何其他人能想到的解决此问题的解决方案..?

5个回答

20

您应该能够为每个图设置DisplayName属性:

figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')

http://www.mathworks.com/help/matlab/ref/line_props.html

顺带一提:我通过使图形看起来符合我的要求,然后选择图形的“文件”菜单选项“生成M文件”,并检查所生成的输出代码,发现了很多像这样的小技巧。


11

有一个方法是利用'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

编辑:正如提问者所指出的,原始版本可能会出现顺序混乱的情况。为了解决这个问题,在修复后的版本中,请指定每个句柄与其标签对应(在正确的顺序中)。


这个方法似乎混淆了颜色和名称...除非我实现有误? - CaptainProg
你的意思是什么,确切地说...啊,我明白了。好的,试试新版本吧! - tmpearce
这是一个非常好的解决方案! - H.Muster

10

plot()属性中使用'DisplayName',并将您的图例称为

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/


3
您可以尝试以下内容:
for k = 1:10

   h(k) = plot(...);
   name{k} = ['condition ' num2str(k)];

end

legend(h, name);

0
创建一个 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). 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接