我正在尝试contourf绘制图,但数据数组的某些区域具有NaN(仅在数据矩阵中,x和y网格网格矩阵已满).我希望这些NaN是透明的,它们用于矩形边界上的NaN.但是,数据矩阵内的连续NaN区域是白色而不是透明的.以下是一个例子:
码:
[X Y] = meshgrid(10:50);
Z = X.*Y;
Z(10:30,10:30) = NaN;
figure
imshow(uint8(repmat(1:4:240,[60,1,3])));
hold on;
contourf(X,Y,Z);
colormap jet;
Run Code Online (Sandbox Code Playgroud)
输出:

暗示:
附加上述代码:
% Find Face
set(findobj(h,'FaceColor',[1 1 1]),'FaceAlpha',0))
Run Code Online (Sandbox Code Playgroud)
将找到白色补丁对象并将其设置为透明.不幸的是,下面的补丁已经满了:

更新:拍摄NaN区域并叠加背景图像会导致:

你可以看到它并没有覆盖整个图像.如果我使用imdilate它摆脱白色区域,但同时也破坏黑色边框以及一点点数据.
基于H. Muster的回答,我通过分割数据人为地创建了乐队(您可以使用一个简单的函数来选择乐队,或者contour在虚拟人物上创建它们,返回它们并重新使用它们).
[X Y] = meshgrid(10:0.1:50);
Z = X.*Y;
Z(100:300,100:300) = NaN;
figure
hold on;
h = pcolor(X,Y,round(Z/500)*500);
set(h,'Edgecolor', 'interp');
colormap jet;
set(gca, 'XLim', [0 60], 'YLim', [0 60]);
Run Code Online (Sandbox Code Playgroud)
我担心我没有包含的工具箱,imread因此无法显示底层渐变,但我认为这样可行.我必须将分辨率提高10倍才能获得相当平滑的图像.

是否可以选择使用pcolor来代替contourf?
[X Y] = meshgrid(10:50);
Z = X.*Y;
Z(10:30,10:30) = NaN;
figure
imshow(uint8(repmat(1:4:240,[60,1,3])));
hold on;
h = pcolor(X,Y,Z)
set(h,'Edgecolor', 'interp');
colormap jet;
Run Code Online (Sandbox Code Playgroud)
