Matlab - 使用补丁突出显示特定间隔

时间:2015-07-02 01:22:24

标签: matlab highlight

我想强调我的情节中的特定间隔。我发现了一种使用补丁对象的方法。 问题是每当我使用它时我的布局都会变得混乱。

以下是情节的一个例子:

x = 1:0.05:25;
plot(x,sin(x)+sin(100*x)/3);
xlabel('x axis');
ylabel('y axis');
title('\Omega \Delta test');
legend('sin \Sigma')

并强调一段时间:

yl = ylim;
patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'k',...
    'facecolor',[.4 .6 .4],'edgecolor',[.4 .6 .4],...
    'facealpha',0.3,'edgealpha',0.3)

使用和不使用patch命令的结果:

正常:

normal plot

凌乱:

messy plot with transparency

查看字体和图例块。关于如何解决这个问题的任何想法?

有没有更好的方法来突出间隔?我需要选择颜色并设置透明度。

还有一个问题:如果没有应用,为什么我必须使用第三个输入(颜色)?

提前致谢!

2 个答案:

答案 0 :(得分:2)

(注意:只有在使用OpenGL渲染器时,此答案才有意义。)

如果是这种情况,那么这是

的一个症状
  

MATLAB 6.5(R13)及更高版本中的一个错误,在使用透明度时,在硬件加速OpenGL中呈现轴的方式

如上所述here

最简单的解决方法是通过包含以下行来强制OpenGL在软件模式下运行:

opengl software

Apparently,这仅适用于Windows和Linux。对于问题的其他症状和解决方案的不同方法,请查看this related question

关于您的其他问题:

不确定这是否是更好的方法,但这是另一种选择:您可以使用area - 这样的情节:

opengl software
figure

x = 1:0.05:25;
ax = plot(x,sin(x)+sin(100*x)/3);

hold on
basevalue = -2;
areaAx = area([5,10],[2,2], basevalue);
set(areaAx, 'FaceColor', [.4 .6 .4])
alpha = get(areaAx, 'Children');
%make area plot transparent
set(alpha, 'FaceAlpha', 0.5);
set(areaAx, 'EdgeColor', 'none');

xlabel('x axis');
ylabel('y axis');
title('\Omega \Delta test');
legend('sin \Sigma')

xlim('auto')
ylim('auto')
hold off

但是,OpenGL渲染器也会在这里引起问题,因此它不是修复,只是另一种选择。

最后,我不确定你所使用的颜色是什么意思。使用了'facecolor',这就是为什么你的情节是绿色的。当您逐步完成area - 选项后,您将看到首先获得纯色。稍后,使用'facealpha' - 选项添加透明度。

答案 1 :(得分:2)

编辑:此答案仅适用于2014b之前的Matlab版本,因为在以后的Matlab版本中,已从所有HG2图形对象中删除了非常有用的erasemode属性。< /子>

我无数次遇到这个问题,我不得不学会忍受它。大多数情况下,我可以接受OpenGL渲染器的故障,如果它给我带来了很好的透明效果,但在某些情况下它是不可接受的。

我使用patch个对象突出显示许多应用程序中的间隔,通常是在几条曲线上。当透明度不是一个选项时,可以使用一个技巧,它是补丁对象的EraseMode属性。如果将EraseMode属性设置为'xor',则修补程序将不会透明,但修补程序下的任何内容都会xor修补像素颜色,因此您仍然可以看到修补程序下的曲线。 / p>

这不是透明度渲染,您可以使用默认的painter渲染器,并避免OpenGL的所有偶然故障。

例如,您的数据:

hp = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'k',...
    'facecolor','g','edgecolor','g',...
    'erasemode','xor') ;

green patch

这个技巧的优势在于它适用于单色显示/打印。如果您不能使用多种颜色,则只能使用一种颜色(例如,如果您计划发布黑白打印)

hpx = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'b',...
    'facecolor','b','edgecolor','b',...
    'erasemode','xor') ;

reverse patch