Use a different colormap scale for different sections of a matrix

15 ビュー (過去 30 日間)
Sean McKee
Sean McKee 2021 年 4 月 5 日
コメント済み: Adam Danz 2021 年 4 月 6 日
I have a 15-dimensional data set and I would like to view the correlation matrix and the covariance matrix in 1 image. To do this I use the upper half triangle + the diagonal of a 15x15 matrix for the covariance data and the lower half triangle for the correlation data. I would like to apply a heatmap to this matrix, but have the covariance color mapping scale be independent of the correlation color map scale.
%Generate some data, and scale it so that covariance is distinct from
%correlation
exampleData = rand(100,15)*50;
exampleCov = cov(exampleData);
exampleCorr = corrcoef(exampleData);
%Creating and plotting the desired matrix
matrixToPlot = triu(exampleCov) + tril(exampleCorr,-1);
heatmap(matrixToPlot);
However I would like to be able to have two different scales for the colormap, one which is used for the lower correlation data and a different one for the covariance.
I considered plotting exampleCov and exampleCorr seperately, but this just overwrites the latter onto the former:
figure
heatmap(triu(exampleCov));
heatmap(tril(exampleCorr,-1));
%This just yields a plot of exampleCorr
This would be easy if I could set 0 values to NaN, and assign NaN color as 'none', but setting NaN color as 'none' is not supported.
  2 件のコメント
Adam Danz
Adam Danz 2021 年 4 月 6 日
The hold on command with heatmap should give you an error indicating that the use of hold on with heatmap is not supported.
Sean McKee
Sean McKee 2021 年 4 月 6 日
Ah, so it does. I've edited that out.

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

回答 (3 件)

darova
darova 2021 年 4 月 6 日
YOu can create your own color matrix
[x,y,z] = peaks(30);
ix = x.^2 + y.^2 < 2^2;
c1 = z*0;
c2 = z*0;
c1(ix) = 1;
c2(~ix) = 1;
C = cat(3,c1,c1*0,c2);
surf(x,y,z,C)
  1 件のコメント
Sean McKee
Sean McKee 2021 年 4 月 6 日
Hmmm I think I see how I could finangle the color matrix to be what I want, but it appears that heat map does not accept a color matrix as input.

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


Adam Danz
Adam Danz 2021 年 4 月 6 日
編集済み: Adam Danz 2021 年 4 月 6 日
> This would be easy if I could set 0 values to NaN, and assign NaN color as 'none', but setting NaN color as 'none' is not supported.
True, but you can set NaN colors to some other color. Setting a color to none with an object that accepts this option just makes the object invisible. For a grid of colors in heatmap, you can set the missing value tiles are any color you want using the MissingDataColor property.
1. Set 0s to NaNs
matrixToPlot(matrixToPlot==0) = NaN;
Or, for floating decimals,
matrixToPlot(abs(matrixToPlot)<max(eps(matrixToPlot(:)))) = NaN;
2. Create heatmap
hm = heatmap(matrixToPlot);
3. Change NaN color
It can't be changed to none but you can change it to white or any other color.
hm.MissingDataColor = 'w';
  2 件のコメント
Sean McKee
Sean McKee 2021 年 4 月 6 日
Sure I can change the NaN values to white or any other color, but this doesn't get me closer to using different scales for different sections of the matrix. I mentioned setting NaN to "none" because this would allow me to plot the second heatmap over the first, but as it stands this simply overwrites the first.
Adam Danz
Adam Danz 2021 年 4 月 6 日
You can't plot two heatmaps superimposed.
You can only change the values of the heatmap input matrix.
If you use imagesc, then you can superimpose two axes although I wouldbn't recommend doing that.

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


Sean McKee
Sean McKee 2021 年 4 月 6 日
I'm thinking the way to do this might be to generate the desired color-mapping by rescaling the covariance values appropriately, inputing into heatmap, but then overlaying the original values as text labels, as described on the heatmap examples page:
However, I would still like to be able to display two different colorbars near the plot, and I'm not sure how to get that to work.
  1 件のコメント
Adam Danz
Adam Danz 2021 年 4 月 6 日
I highly suggest you do this with imagesc instead of heatmap. Heatmap is quite difficult to customize.
Here's an answer that creates a "heatmap" using the heatmap function and using imagesc.

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

カテゴリ

Help Center および File ExchangeColormaps についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by