我有一个大小为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]);
但我不知道如何在一个图中同时绘制A
和B
。
我还尝试过其他命令,例如plot3
,但到目前为止,我还无法弄明白。
任何帮助,也只是提示使用哪种功能,将非常感谢!
答案 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');
以下是侧面视图,您可以看到它是如何完成的。
或者,您可以使用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作为叠加层的颜色,因此它的外观独立于用于底层数据的色彩映射。