我读了关于给绘图标记分配透明度的博客文章。我在一个简单的例子上尝试了代码,一切正常。然后我尝试了一个紧密循环,每次只绘制一个点(这样做是为了将不同的颜色分配给图中的每个点),但是在几个循环周期内,当我获取“plothandle.MarkerHandle”时,它为空。在这些情况下,这个空对象的类是
我尝试过在每个循环中清除变量,加入延迟计时器等方法,但都没有成功。我使用的是Matlab R2015a。
编辑:这里有一个简单的例子。我似乎发现如果我运行整个脚本,它总是失败的。如果我将其分成两个部分,并在另一个按键操作(ctrl-enter或在IDE编辑器中选择所有/ F9)中执行第二个部分,则一切正常。是的,我知道“未记录的功能”很危险,但由于MathWorks仍然没有意识到允许透明度和索引颜色分配对于plot函数是好事情,因此我仍在寻找比使用patch绘制每个数据点更好的解决方法。
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。
编辑:这里有一个简单的例子。我似乎发现如果我运行整个脚本,它总是失败的。如果我将其分成两个部分,并在另一个按键操作(ctrl-enter或在IDE编辑器中选择所有/ 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]');