我有一个matlab程序,应该描述一定的扩散现象。我用循环制作了一个视频,但在我看来,每次迭代时颜色的比例都在变化:
这部分是代码(它很长,所以我认为最好只编写相关部分,告诉我是否应该复制所有内容和函数):
...
w = VideoWriter('video_lin.avi');
MovDC(maxt) = struct('cdata',[],'colormap',[]);
...
for k=1:maxt
...
contourf(f);
colormap('hot')
MovDC(:,k) = getframe;
end
open(w)
writeVideo(w,MovDC)
close(w)
看起来当我写colormap('hot')
时,该程序发明了一个新的规模。
您必须保持颜色范围不变:
contourf(f);
caxis([0 1]); % replace the range [0 1] with one that fits your data in f
颜色正在发生变化,因为contourf
会自动缩放色彩图以增强色彩对比度(这就像imagesc
行为与image
一样)。换句话说,默认情况下,整个色彩映射应用于[min(f) max(f)]
范围,该范围可能会针对示例中的每个帧进行更改。要避免此行为,只需使用caxis
修复范围。
还有两个提示:
colormap('hot')
可以在for
循环开始之前安全地移动colorbar
(它还显示与colormap相关的f
中的值)可以帮助您理解上面讨论的“变色”问题。