I am using isosurface to plot 3d density maps. I would like to plot multiple maps in the same figure, each one with a different color. How can I do so?

7 次查看(过去 30 天)
nBins=20;
D=cell(size(A,1),size(A,2));
for i=1:size(A,1)
for j=1:size(A,2)
if ~isempty(A{i,j})
x=A{i,j}(:,1); y=A{i,j}(:,2); z=A{i,j}(:,3);
xBins=linspace(min(x),max(x),nBins);
yBins=linspace(min(y),max(y),nBins);
zBins=linspace(min(z),max(z),nBins);
D{i,j}=zeros(nBins,nBins,nBins);
for ii=1:numel(x)
xi=find((x(ii)>xBins),1,'Last');
yi=find((y(ii)>yBins),1,'Last');
zi=find((z(ii)>zBins),1,'Last');
D{i,j}(xi,yi,zi)=D{i,j}(xi,yi,zi)+1;
end % for ii=1:numel(x)
D{i,j}=smooth3(D{i,j});
%isosurface(D{i,j})
%hold on
end % if ~isempty(A{i,j})
end % for j=1:size(A,2)
end % for i=1:size(A,1)

采纳的回答

Mil Shastri
Mil Shastri 2019-11-15
You can try this:
[x,y,z,v] = flow;
figure;
p = patch(isosurface(x,y,z,v,-3));
p.FaceColor = 'yellow';
hold on;
p = patch(isosurface(x*3,y*1,z*3,v,-3));
p.FaceColor = 'red';
p.EdgeColor = 'none';
p = patch(isosurface(x*1,y*3,z*3,v,-3));
p.FaceColor = 'green';
p.EdgeColor = 'none';
hold off;
%optional
camlight
lighting gouraud
importdata.PNG
  1 个评论
Guy Nir
Guy Nir 2019-11-15
To make it clear, here are the changes I made to the script, following your suggestion - thank you!
%isosurface(D{i,j})
p=patch(isosurface(yBins,xBins,zBins,D{i,j},2)); % MATLAB'sstaff suggestion (Mil Shastri)
p.FaceColor = C(j,:); % I added a colormap (not shown)
p.EdgeColor = 'none';
hold on;

请先登录,再进行评论。

更多回答(3 个)

Mil Shastri
Mil Shastri 2019-11-15
Hi Guy, Please provide a sample for A matrix too. The code doesn't run without it.

Guy Nir
Guy Nir 2019-11-15
I have attached now a sample of the cell array 'A'. I called the sample cell array 'A1', so you would have to rename it as 'A'.
Thank you,
Guy

Guy Nir
Guy Nir 2019-11-15
% Sorry, please use this updated script, otherwise it will plot them all on top of each other.
GridRes=71;
minX=1.2206e+04;
maxX=4.1832e+04;
minY=1.9815e+03;
maxY=39500;
minZ=-913.6920;
maxZ=8.6982e+03;
nBinsX=round((maxX-minX)/GridRes);
nBinsY=round((maxY-minY)/GridRes);
nBinsZ=round((maxZ-minZ)/GridRes);
D=cell(size(A,1),size(A,2));
for i=1:size(A,1)
for j=1:size(A,2)
if ~isempty(A{i,j})
x=A{i,j}(:,1); y=A{i,j}(:,2); z=A{i,j}(:,3);
xBins=linspace(minX,maxX,nBinsX);
yBins=linspace(minY,maxY,nBinsY);
zBins=linspace(minZ,maxZ,nBinsZ);
D{i,j}=zeros(nBinsX,nBinsY,nBinsZ);
for ii=1:numel(x)
xi=find((x(ii)>xBins),1,'Last');
yi=find((y(ii)>yBins),1,'Last');
zi=find((z(ii)>zBins),1,'Last');
D{i,j}(xi,yi,zi)=D{i,j}(xi,yi,zi)+1;
end % for ii=1:numel(x)
D{i,j}=smooth3(D{i,j});
isosurface(D{i,j})
hold on
end % if ~isempty(A{i,j})
end % for j=1:size(A,2)
end % for i=1:size(A,1)
axis equal

类别

Help CenterFile Exchange 中查找有关 Volume Visualization 的更多信息

标签

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by