正如评论中所说,该命令caxis
仅更新图形的颜色图,但不会修改您之前使用contourf
.
因为我没有你的数据,所以我在函数上构建了我的示例peaks
,我将其缩放到 [-170 80] 范围内
%% // generate sample data set
x = linspace(0,1) ; [mesh_x , mesh_y] = meshgrid(x,x) ;
Z = peaks(100) ; Z(Z<0) = Z(Z<0) * -170./min(min(Z)) ; Z(Z>0) = Z(Z>0) * 80./max(max(Z)) ;
这与您当前的代码一起生成下图,它确实表现出与您的示例相同的问题:
如果您希望 20 条等值线在 [-10 10] 范围内,则有 2 个选项,输出略有不同。
选项1:修改调用contourf
该函数contourf
有一个参数,允许您指定放置等值线的位置,因此最简单的方法是contourf
使用一个参数调用,该参数将指定范围 [-10 10] 内的20 个等值线
%% // method 1 : specify isolevels explicitely
h = figure ;
isolevels = linspace(-10,10,20) ;
contourf(mesh_x, mesh_y, Z, isolevels )
colormap(jet(20)) ; colorbar ; caxis([-10 10])
产生:
现在您的等值线均匀分布在您指定的范围内。我不太清楚为什么值 < -10 出现在白色,而值 > 10 出现在正确的饱和颜色中。
编辑:见评论。要填充最低轮廓,您必须添加低于或等于表面最低点的人工等值线。因此,如果您将呼叫替换为contourf
:
contourf(mesh_x, mesh_y, Z, [min(min(Z)) isolevels] ) %// use this if you want the lowest contour to be filled
这将产生与以下解决方案相同的输出
选项 2:自己使基础数据集饱和
它可能不是最优雅的选择,但至少它摆脱了上述解决方案中的“白斑”问题。这个想法是创建另一个 Z2,它将是范围 [-10 10] 的 Z 的副本,但此范围之外的每个值都将被捕捉到范围限制。
%% // method 2 : saturate the data yourself
h = figure ;
Z2 = Z ;
Z2(Z<=-10) = -10 ; %// snap every value<-10 to the value: -10
Z2(Z>= 10) = 10 ; %// snap every value>10 to the value: 10
contourf(mesh_x, mesh_y, Z2, 20)
colormap(jet(20)) ; colorbar ; caxis([-10 10])
这次您修改基础数据集以满足您的需要,以便您可以contourf
像最初调用它的方式一样调用它。这将产生以下输出: