我正在以典型的MATLAB散点图格式绘制数据.通常在绘制多个数据集时,我会使用命令'hold on;',然后绘制每个数据,然后按此来获取我的图例:
legend('DataSet1', 'DataSet2') % etcetera
Run Code Online (Sandbox Code Playgroud)
但是,我在同一轴上绘制的(多个)数据集不一定每次都是相同的数据集.我在同一轴上绘制了多达六组不同的数据,并且可以显示这些数据的任意组合(取决于用户选择显示的内容).显然,如果我想以传统的方式设置传奇,那将是很多其他的.
我真正想要做的是为每个DataSet分配一个名称,以便之后我可以调用所显示的所有数据的图例.
...或者,任何人都能想到的这个问题的任何其他解决方案......?
Jon*_*ich 19
您应该能够为每个绘图设置DisplayName属性:
figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')
Run Code Online (Sandbox Code Playgroud)
http://www.mathworks.com/help/matlab/ref/line_props.html
边注:我已经让这个数字看我想要的方式,然后选择该图的"文件"菜单选项,发现了很多这样的小动作"生成M-文件...",并检查所生成的输出代码.
tmp*_*rce 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
Run Code Online (Sandbox Code Playgroud)
编辑:正如提问者指出的那样,原始版本可能会出现故障.要解决此问题,请指定哪个句柄与哪个标签一致(在固定版本中,它的顺序正确).
小智 10
使用'DisplayName'的plot()财产,并打电话给你的传说为
legend('-DynamicLegend');
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
资料来源:http://undocumentedmatlab.com/blog/legend-semi-documented-feature/