繁体   English   中英

用于iso-surface的不同颜色的Matlab绘图

[英]Matlab Ploting with different color for iso-surface

我试图使用下面显示的代码以这样的方式绘制每个iso表面的颜色不同,右边会有一个颜色条。 我为不同的颜色制作了一个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

在此输入图像描述

另一种可能性是使用直接颜色映射绘制补丁(通过设置属性'CDataMapping'='direct' ),同时将每个补丁的'CData'分配给您选择的颜色映射中的索引。 这其实是建议最大的图形性能。

请考虑以下示例:

%# 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

截图

我还包括(注释)代码来显示图例,但我发现它是多余的,并且颜色条看起来更好。

Matlab通常会自动绘制不同颜色的不同iso表面,因此您无需关心它。 你需要什么样的酒吧? 彩条或传奇? 无论哪种方式,它只是使用colorbar或图例功能..

%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

图片

由于颜色条对value-> color进行编码,因此除非在所有曲面对之间的z值中没有交点, 否则无法按照您的要求进行操作。 所以下面的解决方案假设情况就是如此。 如果不是这种情况,您仍然可以通过向每个曲面添加一个常量值来实现它,从而沿z轴分离曲面,并消除任何交点。

该解决方案基于构造分段常数值的色彩图矩阵,其分布类似于曲面的z值。 因此,例如,如果你有3个表面,第一个表面的z值介于1和10之间,第二个介于11和30之间,第三个介于31和60之间,你应该做这样的事情(为简单起见我在2D中绘图)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM