Matlab中contourf函数非插值设置:单元格颜色按左下顶点值确定
解决Matlab二元函数棋盘格着色问题
contourf依赖等高线插值逻辑,不适合实现“单元格颜色由左下顶点值决定”的需求,推荐用以下两种简便方法:
方法一:使用pcolor(推荐)
pcolor原生支持基于网格顶点值为单元格着色,不会进行插值,完美匹配你的需求。修改后的代码如下:
n = 3; % mesh size L = 2^n; x = linspace(0,1,2^n+1); f = ones(L+1); for j=1:L/2 f(:,j) = -1; end [X,Y] = meshgrid(x); % 核心绘制代码 pcolor(X,Y,f); shading flat; % 强制单元格填充单一颜色,无过渡效果 set(gca,'linecolor','none'); % 隐藏单元格边框 % 轴属性调整(与原代码一致) set(gca,'Yticklabel',[]) set(gca,'Xticklabel',[]) set(gca,'XColor','none','YColor','none','TickDir','out') % 二值色图设置 black = [0 0 0]; white = [1 1 1]; colormap(gca,[black; white])
关键说明
pcolor(X,Y,f)中,f(i,j)对应[X(i),X(i+1)] × [Y(j),Y(j+1)]围成的单元格,正好是该单元格的左下顶点值。shading flat确保每个单元格颜色统一,避免默认的插值过渡。
方法二:使用imagesc(均匀网格场景)
如果你的网格是均匀分布的,imagesc可以更快速实现效果,只需调整坐标范围匹配笛卡尔网格:
n = 3; % mesh size L = 2^n; f = ones(L+1); for j=1:L/2 f(:,j) = -1; end % 核心绘制代码 imagesc([0,1],[0,1],f); axis equal tight; % 保持单元格为正方形 set(gca,'YDir','normal'); % 确保Y轴正方向向上,匹配笛卡尔坐标 % 轴属性调整与色图设置(同原代码) set(gca,'Yticklabel',[]) set(gca,'Xticklabel',[]) set(gca,'XColor','none','YColor','none','TickDir','out') black = [0 0 0]; white = [1 1 1]; colormap(gca,[black; white])
内容的提问来源于stack exchange,提问作者Víctor
相关产品推荐
相关产品推荐

