我希望能够自定义图例中的彩色线条(即粗体,宽度等)。到目前为止,我可以更改文本的字体大小。有没有办法实现这个目标?
LegendSize = 30;
x = 0:0.1:pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1, 'r', x, y2, 'b', 'LineWidth', 2)
h = legend('A', 'B');
set(h,'FontSize',LegendSize,'FontWeight','bold','LineWidth',2);
答案 0 :(得分:1)
MATLAB处理graphics in version R2014b的方式发生了重大变化,因此我将这个答案分成两部分来处理它们。
在R2014b之前的MATLAB版本中,图例对象具有名为Children
的属性。这是与图例相关的图形对象的句柄列表,包括文本标签旁边显示的行。 This Matlab central thread讨论了访问这些子项并修改其属性的方法。你想要做的是获取子项的句柄,找出它们中的哪些引用行对象,然后相应地操纵它们的属性(例如通过修改它们的LineWidth
属性)。
我目前无法访问R2014b之前的Matlab版本,但我认为这样的事情是合适的:
%// let h be the handle to the legend object.
h_children = get(h,'children'); %// get the children of the legend
%// Find all children whose type is 'Line'
h_lines = findobj(h_children, 'Type', 'Line');
%// Modify the properties of the children as appropriate, e.g.:
set(h_lines, 'LineWidth', 10);
这会使您不会修改其当前在图例中的默认值的任何其他属性,但会将所需的属性修改为自定义值。
自R2014b以来,the legend objects no longer have any children whose properties can be modified。您可以选择手动修改legend properties,但从链接的文档中可以看出,这些选项不包括直接更改行外观的方法。
但是,有一种可能的解决方法。这个解决方案并不理想,因为您需要定义" extra"线对象,但它完成了工作。基本策略是绘制两条不可见线,这些线具有希望在图例中显示的线属性。然后生成图例引用那些不可见的线而不是实际的线,允许在那里和实际图中使用不同的线条样式。
您为隐形线设置的属性将显示在图例中。
示例:
%//Workaround by drawing invisible lines in figure
legend_line_width = 4; %// Desired line width to show in *legend*
legend_line_style = '-'; %//use line style of original plot in legend, too
figure;
plot(x,y1, 'r', x, y2, 'b', 'LineWidth', 2) %// Plot original lines first
hold on; %// prevent deletion of the lines plotted above
%// Draw invisible lines for which we set the legend
h1 = plot(x, y1, 'r', 'visible', 'off', 'LineWidth', legend_line_width, ...
'LineStyle', legend_line_style);
h2 = plot(x, y1, 'b', 'visible', 'off', 'LineWidth', legend_line_width, ...
'LineStyle', legend_line_style);
h = legend([h1 h2], 'A', 'B');%// Legend that points to h1 and h2
set(h,'FontSize',LegendSize,'FontWeight','bold'); %// Change other properties
这至少适用于R2015b。我不确定这种可能性何时出现,欢迎提出意见!
查看legend
's output arguments的文档,我注意到有可能提取额外的输出参数,这些参数为绘制的线对象提供句柄。因此,这消除了对上述解决方法的需要。
示例:
[h, icons, plots, s] = legend('A','B');
%// Find those whose type is line
h_lines = findobj(icons, 'Type', 'Line');
set(h_lines, 'LineWidth', 10); %// modify properties as desired