2011-10-10 382 views
1

我試圖使用下面顯示的代碼以這樣的方式繪圖,即每個等值面的顏色都不相同,並且右邊會有一個顏色條。我爲不同的顏色製作了ss(k)顏色矩陣。等值面的數量是10,但我只有8種顏色。這就是爲什麼我寫了ss(9)='r'ss(10)='r'Matlab使用不同的顏色繪製等值面

我需要一個解決方案,在右側繪製不同顏色和條形的等值面。

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 

enter image description here

+0

還沒有答案................奇怪 – gman

+3

它不是很清楚你的問題是什麼......你的代碼不能這樣運行,因爲你不定義x,...不是很激勵回答:-( –

回答

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 

Image

+0

感謝man..thats我想知道... :) – gman

0

由於彩條編碼值 - >顏色,它是不可能做到你要求什麼,除非所有表面對之間的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) 

custom colorbar

更復雜的色彩映射表(即,更多的顏色)可以用紅,綠和藍的不同混合物來構造(http://www.mathworks.com/help/techdoc/ref/colorspec.html

1

另一種可能性是繪製直接顏色補丁(通過設置屬性'CDataMapping'='direct'),同時指定將每個修補程序的添加到所選顏色表中的索引。這實際上是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 

screenshot

我還包括(註釋)代碼顯示圖例,但我發現它是多餘的,並且一個彩條看起來更好。

+0

非常感謝... – gman

相關問題