How to correctly use contourf with logarithmic color scale?
Show older comments
Dear Matlab Community,
I have a 1372 x 4118 (double) matrix I want to plot using contourf() function. The data entries of the matrix vary from 1 to 1e-9.In order to see changes throughout the whole scale I want to use a log scale fo caxis. The following code sets the Colorbar to log scale but the color representation in the plot is not in agreement with the colorbar: ( Due to memory constraints I reduce the matrix to 600 x 600 )
matrix = load('matrix.mat');
matrix = matrix.a;
x= linspace(1,600,600);
y=linspace(-1,-600,600);
contourf(x,y,matrix);
set(gca,'ColorScale','log');
c = colorbar;
c.Label.String = 'energy [keV]';
xlim([0 100]);
ylim([-200,0]);
clim([1e-7,1e0]);
Please find attached an image of the wrong plot with the full matrix, a subset of the matrix , and the matrix itself.
Can someone please help me with this challange?
Best Regards
sethi
2 Comments
Walter Roberson
on 5 Sep 2023
I do not see any problem. With your sample data, the left edge (near x == 0) has a sharp peak to 1, but most of the rest of the data is around roughly 5e-4
Sebastian
on 5 Sep 2023
Accepted Answer
More Answers (1)
There are two ways I know of:
- Define your own (manual) values on which contours should be drawn, or
- just plot the logarithmic values instead of the linear ones
matrix = load('matrix.mat');
matrix = matrix.a;
x = linspace( 1, 600, 600);
y = linspace(-1,-600, 600);
figure(1);
% using contourf with manual lines
contourf(x, y, matrix, [1 0.1 0.01 0.001 0.0001 0.00001 0]);
set(gca,'ColorScale','log');
c = colorbar;
c.Label.String = 'energy [keV]';
xlim([0 100]); ylim([-200,0]);
figure(2);
contourf(x, y, log10(matrix)); % draw logarithmic values
c = colorbar;
c.Label.String = 'log10(energy) [keV]';
xlim([0 100]); ylim([-200,0]);
Categories
Find more on Contour Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




