与“不一致”的行为;“未记录的Matlab”;数字手柄

与“不一致”的行为;“未记录的Matlab”;数字手柄,matlab,matlab-figure,handle,alpha-transparency,Matlab,Matlab Figure,Handle,Alpha Transparency,我阅读了有关为绘图标记指定透明度的说明。我在一个简单的例子中尝试了这段代码,一切都很好。然后我尝试了一个紧密循环,一次绘制一个点(这样做是为了给图形中的每个点指定不同的颜色),并且总是在几个循环周期内,当我抓取“plothandle.MarkerHandle”时,它是空的。在这些情况下,此空对象的类是Matlab.graphics.GraphicsPlaceholder 当操作成功时,类为: matlab.graphics.primitive.world.Marker 基本循环如下颜色矩阵为每个

我阅读了有关为绘图标记指定透明度的说明。我在一个简单的例子中尝试了这段代码,一切都很好。然后我尝试了一个紧密循环,一次绘制一个点(这样做是为了给图形中的每个点指定不同的颜色),并且总是在几个循环周期内,当我抓取“plothandle.MarkerHandle”时,它是空的。在这些情况下,此空对象的类是
Matlab.graphics.GraphicsPlaceholder
当操作成功时,类为:
matlab.graphics.primitive.world.Marker

基本循环如下<代码>颜色矩阵为每个数据点指定[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
我尝试过清除每个循环中的变量、放入延迟计时器等等,但都没有成功。我使用的是MatlabR2015A

编辑:这里有一个简单的例子。我发现,如果我运行整个脚本,它总是失败。如果我在注释处将其分成两部分,并用一个单独的键笔划(在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]'); 

如果在
plot
tmph.MarkerHandle
检索之间稍等片刻,脚本似乎可以工作,这表明您遇到了运行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]'); 

解决方案没有起作用,听起来不太有希望,但等待似乎对你有帮助,这一事实令人鼓舞。

请提供一个可复制的例子。这篇博文来自2014年11月。您确定未记录的功能仍然适用于2015a吗?这就是没有文档化的特性:它们可以随时消失。看,这个解决方案对@AndrasDeak不起作用,它“有时”起作用——这让我很恼火。Matlab的内部运行不一致。我添加了
drawnow
,在一个快速测试中,它似乎起了作用。“以后还有更多的消息。”卡尔维特霍夫祈求好运。是的,他为一个超过700分的循环工作。反复地因此,至少对于我安装的
MATLAB
,我还可以在下次更新之前…@CarlWitthoft很高兴听到这个消息,谢谢你的反馈!