2017-03-16 11 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); 

そこで、ここで色は赤(密度= 140)と青(密度= 70)ごとに異なります。 現在のカラーマップから特定の範囲の色を取得するにはどうすればよいですか?

答えて

1

fix関数を使用して、値がカラーマップにどのようにマップされるかを説明しています。ここ

色範囲rngiためcmap(index(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

を私はあなたが尋ねていることを正確に理解していませんが、現在のcolormapに与えられた範囲に基づいて色のスケーリングを設定するコマンドcaxisをチェックすることもできます。 hsvのような関数と共に使用して、カラーマップを要求された長さに設定し、値をその範囲にスケーリングすることができます。同様に

 colormap(hsv(71)); 
    caxis([70 140]); 
    patch(isosurface(x,y,z,v,c)) 
    ... 
関連する問題