【问题标题】:Add stippling to surface plot在曲面图中添加点画
【发布时间】:2016-01-19 16:41:12
【问题描述】:

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

现在我想在 A 上绘制另一个变量 B(由 1 和 NaN 组成),这样 1 会显示为某种点画(黑色),而 NaN 则没有任何反应。

结果应该类似于IPCC figure

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

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

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

我也尝试过其他命令,例如plot3,但到目前为止我无法弄清楚。

任何帮助,也只是关于使用哪个功能的提示,将不胜感激!

【问题讨论】:

  • 使用hold onfigure;hold on; plot(A),plot(B)
  • @Adriaan,感谢您的回复;现在我将两个图都放在一个图中,但即使我先绘制 B ,点画也只能在 A 的边缘“窥视”,而不是叠加。为什么会这样?

标签: matlab plot grid surface


【解决方案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 作为叠加层的颜色,因此它的外观独立于用于基础数据的颜色图。

【讨论】:

  • @Adriaan 技术上 pcolor is a surface。但话虽如此,他可以简单地将 zdata 设置为常量矩阵 = 1.1 * max(A(:))
  • 现在很漂亮!我仍然会保留pcolor(很抱歉很无聊),然后 OP 可以选择最适合他的东西
  • @Suever 谢谢你的工作!然而问题是,虽然这个解决方案允许我将黑色“检查器”数据覆盖在基础数据上;我仍然无法弄清楚如何绘制点画。我已经尝试过标记,但后来我在黑色“棋盘格”顶部有标记……如果您对如何修复它有任何建议,我将不胜感激! :-)
  • @KimH 我在这里有点困惑。你为什么要绘制点画?我正在使用的方格表面应替换为数据中AlphaData 等于~isnan(B) 的表面。
  • @KimH 如果我不清楚,你可以在你的代码中设置checker = isnan(B),而不是我使用checkerboard 的地方。如果有帮助,我可以更新我的答案以包含此内容。
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多