2017-03-16 111 views
0

我的圖形包含大量半透明等值面以可視化密度。我選擇顏色的範圍70:140:根據當前顏色表挑選顏色

vs=griddata(x,y,z,v,xs,ys,zs,'linear'); 
for i=70:5:140 
    p(i)=patch(isosurface(xs,ys,zs,vs,i)); 
    isonormals(xs,ys,zs,vs,p(i)); 
    rd=(i-70)/70; 
    set(p(i),'facealpha',0.5); 
    set(p(i),'FaceColor',[rd 0 1-rd],'EdgeColor','none'); % set colors 
end; 
alpha(0.3); 

所以,這裏的顏色從藍色(密度= 70)變化到紅色(密度= 140)。 如何從當前顏色表中獲取給定範圍的顏色?

回答

1

該文檔解釋了here如何使用fix函數將值映射到顏色映射。

下面是其中顏色可以使用cmap(index(i),:)範圍rng訪問用於i你給的範圍內,一個例子:

rng=70:5:140; 
cmap = colormap; 
m = size(cmap,1); 
index = fix((rng-min(rng))/range(rng)*m)+1; 
index(index<1) = 1; 
index(index>m) = m; 

% Plot example 
hold on; 
arrayfun(@(i) plot(rng(i),rng(i),'.', ... 
    'markersize',30,'color',cmap(index(i),:)),1:length(rng)); 
colorbar; hold off; 

此示例輸出以下情節: image of matlab plot

+0

謝謝,一個簡單而有用的答案。 –

0

我不確定我完全理解你在問什麼,但你也可以檢查命令caxis,它將根據給出的當前colormap的範圍來設置顏色的縮放比例。可以使用像hsv這樣的函數將色彩映射設置爲所需的長度,並將這些值縮放到該範圍內。

如,

 colormap(hsv(71)); 
    caxis([70 140]); 
    patch(isosurface(x,y,z,v,c)) 
    ...