フィルターのクリア

Many 2D histograms, single colorbar

1 回表示 (過去 30 日間)
z8080
z8080 2021 年 9 月 8 日
コメント済み: z8080 2021 年 9 月 8 日
Consider this minimal working example:
for i=1:4
numberPairs(i).matrix = randn(1000,2);
subplot (2,2,i)
h(i) = histogram2(numberPairs(i).matrix(:,1), numberPairs(i).matrix(:,2), 'DisplayStyle','tile', 'ShowEmptyBins','on');
end
% add single colorbar heatmap, for all subplots
h_colorbar = colorbar;
h_colorbar.Position = [ 0.9224 0.1093 0.0133 0.8159 ];
As far as I can see, the colorbar gets created subplot-wise, so its range of values reflects only the final matrix. However, the colors get normalized within each matrix, such that the highest count in each matrix is still bright yellow regardless of the value.
Instead, I'd like this heatmap legend to reflect the values in all subplots. Thus, if the highest-count cell in one subplot is 40, that should be a fainter yellow than the brightest cell in another subplot where the value is 50.
Perhaps this needs to be done not by customising the colorbar, but the 2D histograms themselves - but I don't know how...
Thanks in advance for any suggestions.

採用された回答

Bjorn Gustavsson
Bjorn Gustavsson 2021 年 9 月 8 日
For that type of equalization I do someething like this:
for i1 = 1:4
numberPairs(i1).matrix = randn(1000,2);
subplot (2,2,i1)
h(i1) = histogram2(numberPairs(i1).matrix(:,1), numberPairs(i1).matrix(:,2), 'DisplayStyle','tile', 'ShowEmptyBins','on');
cx(i1,:) = caxis; % Save away the intensity limits
end
for i1 = 1:4
subplot (2,2,i1)
caxis([min(cx(:,1)),max(cx(:,2))]) % From the smallest low to the largest high
end
h_colorbar = colorbar;
h_colorbar.Position = [ 0.9224 0.1093 0.0133 0.8159 ];
HTH
  1 件のコメント
z8080
z8080 2021 年 9 月 8 日
Indeed, that's what I needed. Thank you Bjorn!

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

その他の回答 (0 件)

カテゴリ

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

製品


リリース

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by