Specific values in colorbar

11 ビュー (過去 30 日間)
Arthur Brigatto
Arthur Brigatto 2016 年 1 月 11 日
コメント済み: AASHNA SUNEJA 2020 年 10 月 29 日
I am trying to plot a heatmap as the following:
data = [2 1 0 0 0 0 0 0 0 0;1 2 15 0 0 0 0 0 0 0];
colormap('hot');
imagesc(data);
colorbar;
But I want a colorbar with only the values in my data. I don't really need the "transitioning" ones. Is there a way to do so?
Thanks!

採用された回答

Kelly Kearney
Kelly Kearney 2016 年 1 月 16 日
The unique values in you original question are [0 1 2 15]. Do you want just those to appear in the colorbar, or all possible integers between 0 and 15?
For the former:
data = [2 1 0 0 0 0 0 0 0 0;1 2 15 0 0 0 0 0 0 0];
[unq, ~, iunq] = unique(data);
iunq = reshape(iunq, size(data));
ncol = length(unq);
cmap = hot(ncol*2);
cmap = cmap(1:2:end,:);
imagesc(iunq);
colormap(cmap);
cb = colorbar;
set(gca, 'clim', [0.5 ncol+0.5]);
set(cb, 'ticks', 1:ncol, 'ticklabels', cellstr(num2str(unq)));
Walter's code covers the latter case. As a side note, I'd usually just suggest hot(4) to get the 4-color hot colormap, but interpolating hot to only 4 colors results in two nearly-identical shades of yellow; hence the doubling of colors and then using every other in my cmap generation above.
  5 件のコメント
Kelly Kearney
Kelly Kearney 2016 年 1 月 19 日
The 'ticks', 'ticklabel' combo is necessary for HG2 (R2014b+). For earlier versions, substitute '[x/y]tick', '[x/y]ticklabel' as appropriate depending on colorbar orientation.
AASHNA SUNEJA
AASHNA SUNEJA 2020 年 10 月 29 日
Hi
I want my data [4.64 5.99 4.97 5.71 5.34 8.1 8.01 6.12 5.58 8.11 7.94 7.16 7.25 7.5 7.59] to be plotted in 15 equal regions of a circle. Each value to be represented by different color. How I can I do this? The code given above plots the values in a stairght line. For reference I am attaching a plot. A similar profile I want from my experiemntal values. Can anyone help me with this.

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2016 年 1 月 11 日
data_range = ceil(max(data(:))) - floor(min(data(:))) + 1;
imagesc(data);
colormap(hot(data_range));
colorbar();
  2 件のコメント
Arthur Brigatto
Arthur Brigatto 2016 年 1 月 15 日
Perhaps I did not make myself clear. Plotting like this the colorbar displays values like [2 1.8 1.6 1.4 1.2 1 0.8...0]. I want only 2, 1 and 0.
Walter Roberson
Walter Roberson 2016 年 1 月 15 日
For MATLAB R2014a and earlier, colorbar() creates a new axes, which you can record the handle of and set() the YTick parameter of.
You would probably want to be setting the ticks at unique(data(:))

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Distribution Plots についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by