添加点画到表面图

时间:2016-01-19 16:41:12

标签: matlab plot grid surface

我有一个大小为100x150的变量A,其温度值是我使用surface命令绘制的。

现在我想在B上绘制另一个变量A(由1' s和NaN'组成),以便显示1&#39}作为某种点画(黑色),但NaN没有任何事情发生。

结果应该类似于IPCC figure

通过使用标记并将色彩图设置为白色,我能够分别在B中绘制点画:

figure
surface(longitude, latitude, B, 'edgecolor', 'none', 'marker', 'o');
colormap([1 1 1]);

但我不知道如何在一个图中同时绘制AB

我还尝试过其他命令,例如plot3,但到目前为止,我还无法弄明白。

任何帮助,也只是提示使用哪种功能,将非常感谢!

1 个答案:

答案 0 :(得分:1)

您想要创建两个曲面,一个是您的图像数据,另一个是您想要显示的其他黑色区域。要执行此操作,您可以更改叠加层的AlphaData属性(如下所示),也可以将CData设置为NaN,并且在生成的图像中这些值应该是透明的。我认为AlphaData方法更合适,因为无论数据的拓扑结构如何,您都希望网格是统一的。

我在

下面列出了AlphaData方法的示例
load mri
im = double(squeeze(D(:,:,12)));

figure;

surface(im, 'EdgeColor', 'none');

axis image

% Create an overlay image that will display as black
[w,h] = size(im);

nWide = ceil(w / 10);
nHigh = ceil(h / 10);

checker = checkerboard(10, nWide, nHigh);
checker = checker(1:w, 1:h);

% Now plot the overlay
hold on

[xx,yy] = meshgrid(1:w, 1:h);

s = surface(xx, yy, ones(size(xx))*max(im(:)));

set(s, 'EdgeColor', 'none', ...
       'FaceAlpha', 'flat', ...
       'AlphaData', checker, ...
       'FaceColor', 'black');

enter image description here

以下是侧面视图,您可以看到它是如何完成的。

enter image description here

或者,您可以使用pcolor作为叠加层,而不是使用surface

s = pcolor(checker);

set(s, 'EdgeColor', 'none', ...
       'FaceAlpha', 'flat', ...
       'AlphaData', checker, ...
       'FaceColor', 'black)

% And set the ZData so it's above your data
set(s, 'ZData', ones(size(checker)) * max(im(:)))

这种方法的另一个好处是它使用RGB作为叠加层的颜色,因此它的外观独立于用于底层数据的色彩映射。