1

「ジェット」カラーマップにいくつかのポイントがあります。ポイントには 0 から 1 までの係数がありますが、通常は 0.75 ~ 0.9 など、すべての範囲をカバーするわけではありません。

これらの点をプロットすると、0.75 がカラーマップの小さい色になり、0.9 がカラーマップの最大色になるので、すべてのカラーマップが表示されます。私がやりたいのは、それをカラーバーにも表示することです。カラーバーをプロットすると、その上のラベルは 64 になりますが、0.75 から 0.9 にしたいのです。どうやってやるの?

編集 コード自体はあまり役に立たないと思いますが、念のためここに記載します。変数で、をカラーマップの範囲colorsに変換します。ZNCC

EDIT2

うまくいかない理由caxisがわかりました。コードは次のとおりです。

%this is why it doesnt work
im=imread('someimageyouwanttotest_inRGB.png')
imshow(im)


points=[1, 2;1 , 2 ;0.3,0.7]
ZNCC=points(3,:)
cmap=colormap('jet');
colors=cmap(round(  ((1-min(ZNCC))+ZNCC-1).*(size(cmap,1)-1)/max((1-min(ZNCC))+ZNCC-1))+1,:  );
hold on
for i=1:length(ZNCC)

    plot(points(1,i),points(2,i),'.','Color',colors(i,:));  

end
colorbar()
hold off
4

2 に答える 2

1

あなたのコードはすべての色を正しく表示するのではなく、最初に画像なしでカラーバーを設定するだけだと思います:

points=[1, 2;1 , 2 ;0.3,0.7]
ZNCC=points(3,:)

cmap=colormap('jet');
caxis([min(ZNCC) max(ZNCC)]); 
colorbar();

hold on

%this is why it doesnt work
im=imread('someimageyouwanttotest_inRGB.png')
imshow(im)

colors=cmap(round(  ((1-min(ZNCC))+ZNCC-1).*(size(cmap,1)-1)/max((1-min(ZNCC))+ZNCC-1))+1,:  );

for i=1:length(ZNCC)

    plot(points(1,i),points(2,i),'.','Color',colors(i,:));  

end

hold off

持っていないのでテストできませんimshow:/

于 2013-04-15T10:37:10.877 に答える
1

が機能しない場合caxisは、からの戻り値を保存できcolorbarます。これは、カラーバー オブジェクトへのハンドルです。'YTick'次に、や などのプロパティを設定できます'YLim'。設定できるプロパティの完全なリストは、Axes プロパティと同じです (結局のところ、カラーバーは単なる Axes オブジェクトであるため)。

次に例を示します。

% Generate some random data
z = rand(10);
[x, y] = meshgrid(1:size(z, 1));

% Plot colour map
pcolor(x, y, z);
shading interp; % Comment out to disable colour interpolation
colormap jet;

% Setup colorbar
c = colorbar();
set(c, 'YTick', [0.75 0.875 1]); % In this example, just use three ticks for illustation
ylim(c, [0.75 1]);

プロットを終了した後、これを行う必要があるのは 1 回だけです。

編集:データから自動的に制限と目盛りが必要な場合は、次のようなことができます

% Find the limits
lims = [min(z(:)) max(z(:))]; 

% Function for rounding to specified decimal places
dprnd = @(x, dps)round(x*(10.^dps))./(10.^dps);

% Generate ticks
nTicks = 5; 
nDps = 2;
ticks = dprnd(linspace(lims(1), lims(2), nTicks), nDps);

set(c, 'YTick', ticks);
于 2013-04-15T11:18:11.820 に答える