1

以下に示すコードを使用して、各等値面の色が異なり、右側にカラーバーが表示されるようにプロットしようとしました。ss(k)さまざまな色のカラー マトリックスを作成しました。等値面の数は 10 ですが、8 色しかありません。それが私が書いた理由ですss(9)='r'ss(10)='r'.

右側に異なる色とバーを使用して等値面をプロットするソリューションが必要です。

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

ここに画像の説明を入力

4

3 に答える 3

3

もう 1 つの可能性は、選択したカラーマップのインデックスに各パッチ'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

スクリーンショット

凡例を表示するための (コメント付きの) コードも含めましたが、冗長であることがわかり、カラーバーの方が見栄えがよくなりました。

于 2011-10-14T20:02:28.123 に答える
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

画像

于 2011-10-10T09:18:04.713 に答える
0

カラー バーは value->color をエンコードするため、サーフェスのすべてのペア間で z 値に交差がない場合を除き、要求したことを実行することは不可能です。したがって、以下の解決策は、これが事実であることを前提としています。そうでない場合でも、各サーフェスに定数値を追加することで実現できます。これにより、z 軸に沿ってサーフェスを分離し、交差をなくすことができます。

このソリューションは、サーフェスの z 値と同様に分布する、区分定数値のカラーマップ マトリックスの構築に基づいています。たとえば、3 つの面があり、最初の面の z 値が 1 から 10 の間、2 番目の面が 11 から 30 の間、3 番目の面が 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 ) 。

于 2011-10-10T09:28:04.910 に答える