在Matlab图形中绘制图例

时间:2018-09-26 06:22:39

标签: matlab plot matlab-figure

我想在Matlab图中的图例上放置一个箭头,但是当我添加箭头时,图例默认为“在顶部”(参见图片,图例中的黑线覆盖了该图)。

是否有一种方法可以将子图(例如箭头)推到“顶部”,使其出现在图的所有其他组件上,包括图例?我尝试使用uistack,但似乎不适用于图例。 uistack如文档所述,应“ 重新排列UI组件的可视堆栈”。

编辑:

一个非常简单的例子:我绘制的线条应该出现在图例的顶部。

figure;
b = bar(1:3,rand(3));
hold on;
p = plot([0,3],[0,.5],'Color','k','linewidth',1.5); % my arrow
l = legend(b,'value','Location','SouthWest','AutoUpdate','off');
uistack(l,'bottom');

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以使图例背景透明-这样您就可以在图例中看到箭头

figure;
b = bar(1:3,rand(3));
hold on;
p = plot([0,3],[0,.5],'Color','k','linewidth',1.5); % my arrow
l = legend(b,'value','Location','SouthWest','AutoUpdate','off');
l.BoxFace.ColorData = uint8([255 255 255 127]');
l.BoxFace.ColorType = 'truecoloralpha';

ColorData属性为[R G B透明度]

有关信息:这是使用R2015b完成的。

Example output using R2015b

答案 1 :(得分:1)

您可以copyobj当前的图形轴gca并将其Color属性设置为none。此方法将在图例的补丁和相关文本上画线。

说明:Copyobj将复制并显示与axesbar相关的所有line,但不会显示图例(传说本身有axes )。复制的axes的显示将与原始显示完美重叠。并且'Color','none'使复制的axes的白色背景透明,从而使legend再次可见,但在该行下 下可见。

这是代码

f = figure;
b = bar(1:3,rand(3));
hold on;
p = plot([0,3],[0,.5],'Color','k','linewidth',1.5); % my arrow
l = legend(b, 'Location','SouthWest');

% add some magic
hax = copyobj(gca, f); % copy the current axes to the figure
set(hax, 'Color', 'none') % set the new axes's background transparent

enter image description here

答案 2 :(得分:0)

您使用哪个MATLAB版本?自MATLAB 2015b起,uistack似乎不再适用于图例(参见类似的problem)。

如您所说,如果该行可以出现在任何位置,则最佳解决方法可能是选择best图例位置

l = legend(b,'value','Location','Best','AutoUpdate','off');