关于为绘图标记指定透明度,我阅读了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]');
答案 0 :(得分:4)
如果您在plot
和tmph.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,这听起来并不乐观,但等待对你有帮助的事实令人鼓舞。