我尝试使用下面显示的代码以这样的方式绘制每个iso-surface的颜色不同,右边会有一个颜色条。我为不同的颜色制作了ss(k)
颜色矩阵。等表面的数量是10,但我只有8种颜色。这就是我写ss(9)='r'
和ss(10)='r'
的原因。
我需要一个解决方案来绘制右侧不同颜色和条形的iso表面。
ss=['y','m','c','r','g','b','w','k','r','r']
k=1;
for i=.1:.1:1
p=patch(isosurface(x,y,z,v,i));
isonormals(x,y,z,v,p)
hold on;
set(p,'FaceColor',ss(k),'EdgeColor','none');
daspect([1,1,1])
view(3); axis tight
camlight
lighting gouraud
k=k+1;
end
答案 0 :(得分:2)
另一种可能性是使用直接颜色映射(通过设置属性'CDataMapping'='direct'
)绘制补丁,同时将每个补丁的'CData'
分配给您选择的颜色映射中的索引。实际上这是recommended以获得最佳图形性能。
考虑以下示例:
%# volumetric data, and iso-levels we want to visualize
[x,y,z,v] = flow(25);
isovalues = linspace(-2.5,1.5,6);
num = numel(isovalues);
%# plot isosurfaces at each level, using direct color mapping
figure('Renderer','opengl')
p = zeros(num,1);
for i=1:num
p(i) = patch( isosurface(x,y,z,v,isovalues(i)) );
isonormals(x,y,z,v,p(i))
set(p(i), 'CData',i);
end
set(p, 'CDataMapping','direct', 'FaceColor','flat', 'EdgeColor','none')
%# define the colormap
clr = hsv(num);
colormap(clr)
%# legend of the isolevels
%#legend(p, num2str(isovalues(:)), ...
%# 'Location','North', 'Orientation','horizontal')
%# fix the colorbar to show iso-levels and their corresponding color
caxis([0 num])
colorbar('YTick',(1:num)-0.5, 'YTickLabel',num2str(isovalues(:)))
%# tweak the plot and view
box on; grid on; axis tight; daspect([1 1 1])
view(3); camproj perspective
camlight; lighting gouraud; alpha(0.75);
rotate3d on
我还包括(注释)代码来显示图例,但我发现它是多余的,并且颜色条看起来更好。
答案 1 :(得分:1)
Matlab通常会自动绘制不同颜色的不同等值面,因此您无需关心。你需要什么样的酒吧?彩条或传奇?无论哪种方式,只需使用颜色栏或图例功能..
%Create some nice data
[x y z] = meshgrid(1:5,1:5,1:5);
v = ones(5,5,5);
for i=1:5
v(:,:,i)=i;
end
v(1:5,3:5,2)=1
v(1:5,4:5,3)=2
%Plot data
for i=1:5
isosurface(x,y,z,v,i)
end
%Add legend and/or colorbar
legend('one','Two','Three','Four')
colorbar
答案 2 :(得分:0)
由于颜色条编码了值 - >颜色,因此无法按照您的要求进行操作,除非所有曲面对之间的z值没有交点。所以下面的解决方案假设情况就是如此。如果不是这种情况,您仍然可以通过向每个曲面添加一个常量值来实现它,从而沿z轴分离曲面,并消除任何交点。
该解决方案基于构建分段常数值的色彩映射矩阵,其分布方式与曲面的z值类似。例如,如果你有3个表面,第一个表面的z值介于1和10之间,第二个介于11和30之间,第三个介于31和60之间,你应该做这样的事情(为简单起见我在2D中绘图)< / p>
r = [1 0 0];
g = [0 1 0];
b = [0 0 1];
cmap = [r(ones(10,1),:); g(ones(20,1),:); b(ones(30,1),:)];
z1 = 1:10;
z2 = 11:30;
z3 = 31:60;
figure; hold on
plot(z1,'color',r)
plot(z2,'color',g)
plot(z3,'color',b)
colorbar
colormap(cmap)
可以使用红色,绿色和蓝色(http://www.mathworks.com/help/techdoc/ref/colorspec.html)的不同混合构造更复杂的色彩图(即更多颜色)