MATLAB:如何在透明区域上绘制纯黑线?

时间:2016-10-17 14:07:13

标签: matlab

当我在透明区域(由alpha值指定)上绘制纯黑线时,绘制的线条不是黑色,因为它会为下面的透明区域指定。有没有办法让特定的绘制线忽略其他具有alpha值的绘制对象,并在顶部绘制它们'?我使用的MATLAB版本是2013a。

编辑:我的代码,使用补丁行(http://de.mathworks.com/matlabcentral/fileexchange/36953-patchline/content/patchline.m):

figure
hold all
red_weights = rand(100,100);

%patches with alpha value
for i= 1:50
         patchline(1:length(red_weights),red_weights(i,:),'edgecolor','b','linewidth',1,'edgealpha',0.3);
end

%following line should be solid black
plot(mean(red_weights(51:100,:)),'--k','linewidth',2);

输出另存为.png: enter image description here

1 个答案:

答案 0 :(得分:2)

使用HG2(R2014b及以上):

对于使用HG2的Matlab版本,MATLAB渲染器在透明度方面表现良好(使用R2016a 渲染):

enter image description here

Pre HG2(R2014a及之前):

对于早期的Matlab版本,补丁中透明度的使用迫使Matlab放弃painter渲染器并使用OpenGL一个......这是众所周知的透明问题。

Matlab 2013a给出: enter image description here

但如果您将黑线属性EraseMode设置为Background,则会获得更明确的行:

hp = plot(mean(red_weights(51:100,:)),'-k','linewidth',2);
set(hp,'EraseMode','background')

现在(仍然是R2013a):

enter image description here

作为一般技巧,我通过尝试EraseMode属性的不同设置解决了很多透明度/ OpenGL故障。它并不总是有效,但可以节省大量案例。

请注意,此属性(EraseMode)在最新的Matlab版本中已经过时(首先我们收到警告,然后是一个完整的错误),所以如果你的代码必须使用这个技巧,你可能需要包括版本检查并根据运行的Matlab版本分支代码。