Plot Stacked Surfaces with Coloring Appropriate for each Individual Surface

조회 수: 4 (최근 30일)
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()

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Surface 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