当我在透明区域(由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);
答案 0 :(得分:2)
对于使用HG2的Matlab版本,MATLAB渲染器在透明度方面表现良好(使用R2016a 渲染):
对于早期的Matlab版本,补丁中透明度的使用迫使Matlab放弃painter
渲染器并使用OpenGL
一个......这是众所周知的透明问题。
但如果您将黑线属性EraseMode
设置为Background
,则会获得更明确的行:
hp = plot(mean(red_weights(51:100,:)),'-k','linewidth',2);
set(hp,'EraseMode','background')
现在(仍然是R2013a):
作为一般技巧,我通过尝试EraseMode
属性的不同设置解决了很多透明度/ OpenGL故障。它并不总是有效,但可以节省大量案例。
请注意,此属性(EraseMode
)在最新的Matlab版本中已经过时(首先我们收到警告,然后是一个完整的错误),所以如果你的代码必须使用这个技巧,你可能需要包括版本检查并根据运行的Matlab版本分支代码。