在matlab中对pcolor进行着色和遮罩

时间:2012-05-09 14:43:55

标签: matlab overlay mask stipple

真的有两个问题,但我觉得它们重叠了,所以我会在一个地方问他们(如果没关系的话)。

我用matlab在matlab中创建了一个pcolor:

p = pcolor(Lon', Lat', data);

但现在我想添加一些信息。我有一个矩阵mask,它与数据具有相同的维度,但是由1和0填充。如果它包含1,我想保留pcolor中的像素,当它包含0时,将其删除(不只是将值转为零,这不是我的色彩映射中的白色像素表示)。

其次,我有一个名为'点画'的第二个矩阵,它再次包含0和1。我现在想要用点画效果覆盖由1表示的任何位置。

这样做的目的是创建一个像这样的图像: http://www.ipcc.ch/publications_and_data/ar4/wg1/en/figure-spm-7.html 在平均值被绘制的地方,但是有太多分歧的区域被排除在外,并且那些有很多共识的区域被“点缀”。

提前致谢!

1 个答案:

答案 0 :(得分:4)

我采取的方法是使用你的面具来提高透明度。这对于pcolor来说稍微复杂一些,因为它不允许您在创建绘图时直接设置属性,但是您可以抓住它的句柄并以此方式执行。

要覆盖点画,您只需hold on,这样pcolor图就不会消失,并使用'plot'绘制您想要的点。

Lon = (-179:1:180)'; %# comment for formatting'
Lat = -90:1:90;
data = randn(length(Lon),length(Lat)); #% generate random data
mask = randi(2,size(data))-1; #% generate a random mask (zeros and ones)
point_matrix = randi(4,size(data)-1)==4; #% random (logical) matrix
[r c]=find(point_matrix==1); %# get the coordinates of the ones
figure;
hold on;
#% save a handle to the surface object created by pcolor
h=pcolor(repmat(Lon ,1,length(Lat)),repmat(Lat,length(Lon),1),data);
#% set properties of that surface: use mask as alphadata for transparency
#% and set 'facealpha' property to 'flat', and turn off edges (optional)
set(h,'alphadata',mask,'facealpha','flat','edgecolor','none');
#% overlay black dots on the center of the randomly chosen tiles
plot(r-179.5,c-89.5,'.k')