"未记录的Matlab"数字处理

时间:2016-01-28 19:01:00

标签: matlab matlab-figure handle alpha-transparency

关于为绘图标记指定透明度,我阅读了blog post。我在一个简单的例子上尝试了代码,一切都很好。然后我尝试了一个紧凑的循环,一次绘制一个点(这样做可以为图中的每个点指定不同的颜色),并且总是在几个循环周期内,当我抓住" plothandle.MarkerHandle&# 34;,它是空的。在这些情况下,此空对象的类为Matlab.graphics.GraphicsPlaceholder 当操作成功时,该课程为: matlab.graphics.primitive.world.Marker

基本循环如下。 colormatrix为每个数据点分配[r,g,b]颜色。

hold on
opacity = 0.5; 
for jk = 1:numel(idx
  tmph = plot(foox(jk),fooy(jk),'o','color',colormatrix(jk,:) );
     tmpk = tmph.MarkerHandle;

     tmpk.FaceColorData = uint8(double(tmpk.EdgeColorData).* [1,1,1,opacity]');
     tmpk.EdgeColorData = uint8(double(tmpk.EdgeColorData).* [1,1,1,opacity]');

end

我尝试过每个循环清除变量,放入延迟计时器等等,没有运气。我正在使用Matlab R2015a。

编辑:这是一个简单的例子。我似乎要发现的是,如果我运行整个脚本,它总是会失败。如果我将其分成两部分并注明,并使用单独的键击执行第二部分(在IDE编辑器中按ctrl-enter或selectall / F9),一切正常。是的,我知道"未记录的功能"风险很大,但由于MathWorks仍然没有弄清楚允许透明度和索引颜色分配是plot函数的好东西,我仍然在寻找比使用更好的解决方法patch绘制每个数据点。

figure
xfoo = 1:10;
yfoo = 2*xfoo;
tmph = plot(xfoo,yfoo,'p','color',[1,0,1]);
hold on
opacity = 0.7; 
%  wait a while here. 
tmpk = tmph.MarkerHandle;
tmpk.FaceColorData = uint8(double(tmpk.EdgeColorData).*[1,1,1,opacity]');
tmpk.EdgeColorData =  uint8(double(tmpk.EdgeColorData).*[1,1,1,opacity]'); 

1 个答案:

答案 0 :(得分:4)

如果您在plottmph.MarkerHandle的检索之间稍等一点,脚本似乎有效,这表明您遇到的问题与用户报告的on the blog相同运行R2014b。 Yair建议在情节之后致电drawnow

figure
xfoo = 1:10;
yfoo = 2*xfoo;
tmph = plot(xfoo,yfoo,'p','color',[1,0,1]);
hold on
opacity = 0.7; 
drawnow;
tmpk = tmph.MarkerHandle;
tmpk.FaceColorData = uint8(double(tmpk.EdgeColorData).*[1,1,1,opacity]');
tmpk.EdgeColorData =  uint8(double(tmpk.EdgeColorData).*[1,1,1,opacity]'); 

解决方法没有成功for a user running R2015a,这听起来并不乐观,但等待对你有帮助的事实令人鼓舞。