Colorbar, display regular intervals

5 views (last 30 days)
Francesco Marchione
Francesco Marchione on 24 Sep 2021
Answered: Samay Sagar on 16 Feb 2024
I would like to have the colourbar displaying values for regular intervals: that is, I would like to have the colourbars displaying both extremes (max and min) and a fixed number of intermediate values (intervals), automatically.
I attach the xslx file
T1 = readtable('SLJ20 PEEL.xlsx', 'VariableNamingRule','preserve');
% First10Rows = T1(1:10,:)
% T1Sz = size(T1)
VarNames = T1.Properties.VariableNames;
N = 50; % Interpolation Matrix Size
xv = linspace(min(T1{:,1}), max(T1{:,1}), N); % Create Vector
yv = linspace(min(T1{:,2}), max(T1{:,2}), N); % Create Vector
[Xm,Ym] = ndgrid(xv,yv); % Create Interpolation Matrices
Zm = griddata(T1{:,1}, T1{:,2}, T1{:,3}, Xm, Ym); % Interpolate
figure
surfc(Xm, Ym, Zm)
grid on
shading interp
set(0, 'DefaultTextInterpreter', 'latex')
hcb = colorbar;
xlabel(hcb,'[{\it Pa}]');
hcb.Label.Interpreter = 'latex';
set(hcb,'TickLabelInterpreter','latex')
colormap(jet(50))
title ('EPX1','FontSize',13,'interpreter', 'latex')
set(0, 'DefaultTextInterpreter', 'latex')
hcb = colorbar;
hcb.TickLabelInterpreter='latex';
% ColorbarRulerProperties = hcb.Ruler
hcb.Ruler.TickLabelFormat = '%.2f';
set(hcb, 'Ticks', sort([hcb.Limits, hcb.Ticks]))
set(gca,'TickLabelInterpreter','latex')
% tix = hcb.Ticks;
% expstr = @(x) [x(:).*10.^ceil(-log10(abs(x(:)+(x==0)))) floor(log10(abs(x(:)+(x==0))))];
% tixexp = expstr(tix(:))
% tixexplbl = compose('%.2f \\times 10^{%2d}',[tixexp(:,1) fix(tixexp(:,2))])
% hcb.TickLabels = tixexplbl;
xlabel('{\it x} [{\it mm}]')
ylabel('{\it y} [{\it mm}]')
zlabel('{\it} Shear stress [{\it MPa}]')

Answers (1)

Samay Sagar
Samay Sagar on 16 Feb 2024
To have the colorbar display both extremes (max and min) and a fixed number of intermediate values at regular intervals automatically, you can set the “Ticks” property of the “colorbar” to a vector of values that spans from the minimum to the maximum of the data range, divided into equal intervals. You can do this using the “linspace” function.
Read more about “linspace” here:
Here's how you can modify your existing code to achieve this:
T1 = readtable('SLJ20 PEEL.xlsx', 'VariableNamingRule','preserve');
VarNames = T1.Properties.VariableNames;
N = 50;
xv = linspace(min(T1{:,1}), max(T1{:,1}), N);
yv = linspace(min(T1{:,2}), max(T1{:,2}), N);
[Xm,Ym] = ndgrid(xv,yv);
Zm = griddata(T1{:,1}, T1{:,2}, T1{:,3}, Xm, Ym);
figure
surfc(Xm, Ym, Zm)
grid on
shading interp
set(0, 'DefaultTextInterpreter', 'latex')
% Colorbar settings
hcb = colorbar;
xlabel(hcb,'[{\it Pa}]');
hcb.Label.Interpreter = 'latex';
set(hcb,'TickLabelInterpreter','latex')
colormap(jet(50))
title ('EPX1','FontSize',13,'interpreter', 'latex')
set(0, 'DefaultTextInterpreter', 'latex')
hcb = colorbar;
hcb.TickLabelInterpreter='latex';
% Define the number of intervals for the colorbar
numIntervals = 5;
cmin = min(Zm(:));
cmax = max(Zm(:));
ticks = linspace(cmin, cmax, numIntervals+1);
hcb.Ticks = ticks;
hcb.TickLabels = arrayfun(@(v) sprintf('%.2f', v), ticks, 'UniformOutput', false);
set(gca,'TickLabelInterpreter','latex')
xlabel('{\it x} [{\it mm}]')
ylabel('{\it y} [{\it mm}]')
zlabel('{\it} Shear stress [{\it MPa}]')
Read more about “Ticks” and “colobar” here:

Categories

Find more on Colormaps in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!