我想强调我的情节中的特定间隔。我发现了一种使用补丁对象的方法。 问题是每当我使用它时我的布局都会变得混乱。
以下是情节的一个例子:
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命令的结果:
正常:
凌乱:
查看字体和图例块。关于如何解决这个问题的任何想法?
有没有更好的方法来突出间隔?我需要选择颜色并设置透明度。
还有一个问题:如果没有应用,为什么我必须使用第三个输入(颜色)?
提前致谢!
答案 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') ;
这个技巧的优势在于它适用于单色显示/打印。如果您不能使用多种颜色,则只能使用一种颜色(例如,如果您计划发布黑白打印)
hpx = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'b',...
'facecolor','b','edgecolor','b',...
'erasemode','xor') ;