You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:45:40