Octave中图例符号线宽与实际绘图符号线宽不一致如何修复
问题修复方案
Octave默认不会将绘图时配置的标记线宽同步到图例组件,可通过以下两种方法实现图例符号与绘图区符号线宽完全一致:
方案1:通过绘图句柄精准调整(兼容所有Octave版本)
修改代码存储每个图层的绘图句柄,创建图例后单独调整对应符号的线宽即可:
clear; rand ("seed", 158); data1x = rand(1,30); data1y = rand(1,30); data2x = 1+rand(1,30); data2y = 1+rand(1,30); dbx = 0:0.1:1.5; dby = (-2/1.5).*dbx+2; % 存储各图层绘图句柄 h_neg = plot(data1x,data1y,'x','linewidth', 3); hold on; h_pos = plot(data2x,data2y,'x','linewidth', 3); h_db = plot(dbx,dby,'k','linewidth', 2); % 传入句柄创建图例,避免图层对应错误 legend([h_neg, h_pos, h_db], "Negative", "Positive", "Decision boundary", "location","east"); % 调整图例内各符号的线宽 lgd_objs = get(legend(), 'Children'); set(lgd_objs(1), 'linewidth', 2); % 决策边界线宽保持和绘图一致为2 set(lgd_objs(2), 'linewidth', 3); % Positive类叉号线宽设为3 set(lgd_objs(3), 'linewidth', 3); % Negative类叉号线宽设为3 set(gca,"linewidth", 2, "fontsize", 20); axis("nolabel"); hold off; saveas(1,"Diagram2.svg","svg");
方案2:全局设置图例标记线宽(适合高版本Octave)
如果你使用的是Octave 6.0及以上版本,可直接调用markerlinewidth属性全局设置图例标记的线宽,无需逐个调整:
% 在原有代码创建完图例后添加以下一行代码即可 set(findobj(gcf, 'type', 'legend'), 'markerlinewidth', 3);
注意:该属性仅在高版本Octave中支持,低版本运行会报错,请优先使用方案1
内容的提问来源于stack exchange,提问作者Coda
相关产品推荐
相关产品推荐

