我有一个matlab程序,应该用来描述某种扩散现象。我制作了一个带循环的视频,但在我看来,每次缩放时颜色的比例都在变化:
部分是代码(很长,所以我认为最好只写relevent部分,告诉我是否应该复制所有内容并使用函数):
...
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')
时,程序似乎发明了一个新的比例尺。
答案 0 :(得分:2)
您必须保持颜色范围恒定:
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
(还向您显示f
中与颜色图关联的值)可以帮助您理解上面讨论的“变色”问题。