Plot Stacked Surfaces with Coloring Appropriate for each Individual Surface

3 ビュー (過去 30 日間)
Paul Safier
Paul Safier 2024 年 5 月 7 日
コメント済み: Adam Danz 2024 年 5 月 9 日
I'm trying to plot several surfaces on top of each other and have their coloring be appropriate for each individual surface based on the data range, i.e. not including the offset.
The surfaces should be offset as the data is (and how I show in the image below). I just want the surface coloring to be based on if each surface had a mean of zero. What I have tried is this, but it's not getting the colors right.
initial = data{1};
climR = [min(initial(:)) max(initial(:))];
figure;
s1 = surf(data{1}); s1.EdgeColor = 'none'; view([-10.5 15]); clim(climR);
hold on;
s2 = surf(data{2}); s2.EdgeColor = 'none'; view([-10.5 15]);
s3 = surf(data{3}); s3.EdgeColor = 'none'; view([-10.5 15]); hcb=colorbar; title(hcb,'Topo (nm)');
%
Any suggestions? I'd like the figure to look somewhat like the cobbled together image pasted below. The cell array "data.mat" is attached.

採用された回答

Adam Danz
Adam Danz 2024 年 5 月 8 日
Assuming the three surfaces are on the same axes, you can set the cdata for each surface. The cdata can be normalized so that each surface shares the same range of cdata values. Then set clim to that same range to ensure that the colorbar shares that range too.
% Create zdata for 3 data sets
[X,Y] = meshgrid(1:0.5:10,1:20);
data1 = (sin(X) + cos(Y))*6;
data2 = 5*peaks(20) + 100;
[X2,Y2] = meshgrid(-5:.5:5);
data3 = (Y2.*sin(X2) - X2.*cos(Y2))*4 + 200;
% Compute cdata for each data set so that it ranges from [-1,1]
cdata1 = rescale(data1,-1,1);
cdata2 = rescale(data2,-1,1);
cdata3 = rescale(data3,-1,1);
% Plot each surf, specify cdata
figure()
s1 = surf(data1,cdata1,'EdgeColor','none');
hold on
s2 = surf(data2,cdata2,'EdgeColor','none');
s3 = surf(data3,cdata3,'EdgeColor','none');
% Set color range to the range of cdata
clim([-1,1])
% Expand aspect ratio to better see space between surfaces
ax = gca;
ax.PlotBoxAspectRatio(3) = 2;
colorbar()
  2 件のコメント
Paul Safier
Paul Safier 2024 年 5 月 9 日
Thanks @Adam Danz this works pretty nicely!
Adam Danz
Adam Danz 2024 年 5 月 9 日
Thanks for confirming, @Paul Safier!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

タグ

製品


リリース

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by