5

いくつかのデータを表現したい地形図があります。下の図を参照してください。

ここに画像の説明を入力

右側の白い丸で囲まれた領域は、プロットの残りの部分とは別のサーフ関数です。私ができるようにしたいのは、配色を変更することです。外側はグレースケールで、内側はプロットとは別の値に基づいた単一の色にする必要があります。現在、 colormap(gray) 関数を試してから変更しましたが、プロット全体が変更されます。

さまざまなプロット スタイルに関する提案を受け付けています。surf の代わりに plot3。したがって、これら 2 つのサーフを作成するために必要なデータは、x、y、z ポイントの 2 つのリストです。

可能であれば、丸で囲まれた領域の色を表すカラー バーも表示したいと思います (これは、外側の値に基づいて設定されます)。

これを行う良い方法を知っている人はいますか?

ありがとう。

編集:

私がやりたいことはこれです:

ここに画像の説明を入力

画像では、マウンドの上部に濃い青があってはなりません。画像は、より多くの「青い」スポットで継続的に更新されます。色は外部値に基づいて変化する必要があり、理想的には、以前のスポットが重なっている場合は色をマージします。

4

2 に答える 2

7

丸で囲まれた領域を単一の色のみに設定したいので、そのFaceColorプロパティを設定できます。例えば:

%# make some test data
[xx,yy]=ndgrid(-5:0.1:5,-5:0.1:5);
zz = exp(-xx.^2/2+-yy.^2/2);
zz1 = zz;
zz1(zz1>0.5)=NaN;
zz2 = zz;
zz2(zz2<0.5)=NaN;

%# plot first surface, set colormap
surf(zz1)
colormap('gray')

%# stretch colormap to [0 0.5]
caxis([0 0.5])

%# plot the second surface in red
hold on
surf(zz2,'faceColor','r')

ここに画像の説明を入力

編集

'CData'サーフェスの一部に異なるカラーマップを使用する場合は、サーフェスのプロパティをカラーマップのインデックスに設定する必要があります。カラーバーに単一のカラーマップのみを表示するには、カラーバーが単なる別のプロットであるという事実を利用できます。つまり、その一部のみを表示し、ラベルを変更できます。

%# make some more test data
[xx,yy]=ndgrid(-5:0.1:5,-5:0.1:5);
zz = exp(-xx.^2/2+-yy.^2/2);
zz1 = zz(1:50,:);
zz2 = zz(52:end,:);
xx1 = xx(1:50,:);xx2=xx(52:end,:);
yy1 = yy(1:50,:);yy2=yy(52:end,:);

%# create multi-colormap, set it to figure
figure
cmap = [gray(128);copper(128)];
colormap(cmap)

%# plot surfaces, setting the cdata property to indices 1-128 and 129-256, 
%# respectively, in order to access the different halves of the colormap
surf(xx1,yy1,zz1,'cdata',round(127*(zz1-min(zz1(:))/(max(zz1(:))-min(zz1(:)))))+1,'cdatamapping','direct')
hold on
surf(xx2,yy2,zz2,'cdata',round(127*(zz2-min(zz2(:))/(max(zz2(:))-min(zz2(:)))))+129,'cdatamapping','direct')

%# find the handle to the colorbar
%# alteratively: cbarH = findall(gcf,'tag','Colorbar')
cbarH = colorbar;

%# set limits and ticks/labels
ylim(cbarH,[129 255])
set(cbarH,'ytick',[129 192 255],'yticklabel',[0 0.5 1])

ここに画像の説明を入力

于 2012-07-02T01:19:12.463 に答える
2

MATLAB テクニカル サポートからこれを見ましたか?

http://www.mathworks.com/support/solutions/en/data/1-GNRWEH/index.html

プロパティを編集できcolorbarます。

g = colorbar;
get(g)

例えば、

% Define a colormap that uses the cool colormap and 
% the gray colormap and assign it as the Figure's colormap.
colormap([cool(64);gray(64)])


% Generate some surface data.
[X,Y,Z] = peaks(30);


% Produce the two surface plots.
h(1) = surf(X,Y,Z);
hold on
h(2) = pcolor(X,Y,Z);
hold off


% Move the pcolor to Z = -10.
% The 0*Z is in the statement below to insure that the size
% of the ZData does not change.
set(h(2),'ZData',-10 + 0*Z)
set(h(2),'FaceColor','interp','EdgeColor','interp')
view(3)


% Scale the CData (Color Data) of each plot so that the 
% plots have contiguous, nonoverlapping values. The range 
% of each CData should be equal. Here the CDatas are mapped 
% to integer values so that they are easier to manage; 
% however, this is not necessary.


% Initially, both CDatas are equal to Z.
m = 64; % 64-elements is each colormap


cmin = min(Z(:));
cmax = max(Z(:));
% CData for surface
C1 = min(m,round((m-1)*(Z-cmin)/(cmax-cmin))+1); 
% CData for pcolor
C2 = 64+C1;


% Update the CDatas for each object.
set(h(1),'CData',C1);
set(h(2),'CData',C2);


% Change the CLim property of axes so that it spans the 
% CDatas of both objects.
caxis([min(C1(:)) max(C2(:))])

% I added these two lines
g = colorbar
set(g,'YLim',[1 60])

最後の 2 行は私のものです。残りは、MATLAB Tech Support リンクからのものです。また、カラーマップが 1 つだけのカラーバーが表示されます。カラーマップの灰色の半分が必要な場合は、set(g,'YLim',[64 128]).

ここに画像の説明を入力

于 2012-07-02T01:09:52.710 に答える