How to set colour bar scale as a power of 10?
5 views (last 30 days)
Show older comments
Hi everyone,
May somehelp me to adjust the colour bar scale with only major ticks (at 1e-9, 1e-8, 1e-7, 1e-6)
Here is my script (data also attached)
clear all
clc
X = load('PDS_case.csv'); % input data
C_sort = sortrows(X,5);
Tri = C_sort(1:86,:);
data1 = sortrows(Tri,7);
PDS=(data1(:,7))';
data2=data1(:,8:66);
data4=data2';
Y=data4(:,1:86);
X=Y';
UU=[1e-8, 1.5e-8, 2e-8, 2.5e-8, 3e-8, 3.5e-8, 4e-8, 4.5e-8, 5e-8, 5.5e-7
6e-8, 6.5e-8, 7e-8, 7.5e-8, 8e-8, 8.5e-8, 9e-8, 9.5e-8, 10e-8, 10.5e-7]; % these values linked with each color bar, should be make a color bar
r{1}=[X(1:18,:)];
r{2}=[X(19:39,:)];
r{3}=[X(40:54,:)];
r{4}=[X(55:60,:)];
r{5}=[X(61:62,:)];
r{6}=[X(63:65,:)];
r{7}=[X(66,:)];
r{8}=[X(67:68,:)];
r{9}=[X(69:72,:)];
r{10}=[X(73:74,:)];
r{11}=[X(75:76,:)];
r{12}=[X(77:78,:)];
r{13}=[X(79,:)];
r{14}=[X(80,:)];
r{15}=[X(81,:)];
r{16}=[X(82:85,:)];
r{17}=[X(86,:)];
figure
cm = colormap(jet(numel(r)));
cm = colormap(jet);
cm = colormap(jet(numel(r)));
cc = colorbar('vert');
set(cc,'Ticks',((1:numel(UU))/numel(UU))');
set(cc,'TickLabels',num2str(UU'));
ylabel(cc,'Peak dynamic strain')
hold on
for k = 1:numel(r) % ... Then, Remove The 'NaN' Elements ...
ra = r{k};
ra = ra(~isnan(ra));
[f ,x ] = ecdf(ra);
[x ,ia ,ic ] = unique(x);
f = f(ia );
xx = linspace(min(x ),max(x ),100);
ff = interp1(x ,f ,xx );
ffs = smoothdata(ff , 'loess',20);
dx = mean(diff(xx ));
dfdxs = gradient(ffs )./dx ;
plot(xx , dfdxs , '-', 'linewidth', 1, 'Color',cm(k,:))
ylim([0, 8])
xlabel('R')
ylabel('Probability density')
caption = sprintf('Case 1:Events with R<0.5');
sgtitle(caption);
end
hold off
grid
Here are my results

Here is what i required.

0 Comments
Accepted Answer
Voss
on 31 Mar 2022
This will make a log-scale colorbar with limits and ticks based on the vector UU (it doesn't go down to 1e-9 because UU doesn't go down to 1e-9, but you can adjust UU as required):
clear all
clc
X = load('PDS_case.csv'); % input data
C_sort = sortrows(X,5);
Tri = C_sort(1:86,:);
data1 = sortrows(Tri,7);
PDS=(data1(:,7))';
data2=data1(:,8:66);
data4=data2';
Y=data4(:,1:86);
X=Y';
% UU=[1e-8, 1.5e-8, 2e-8, 2.5e-8, 3e-8, 3.5e-8, 4e-8, 4.5e-8, 5e-8, 5.5e-7
% 6e-8, 6.5e-8, 7e-8, 7.5e-8, 8e-8, 8.5e-8, 9e-8, 9.5e-8, 10e-8, 10.5e-7]; % these values linked with each color bar, should be make a color bar
UU = (1:0.5:10.5)*1e-8;
r{1}=[X(1:18,:)];
r{2}=[X(19:39,:)];
r{3}=[X(40:54,:)];
r{4}=[X(55:60,:)];
r{5}=[X(61:62,:)];
r{6}=[X(63:65,:)];
r{7}=[X(66,:)];
r{8}=[X(67:68,:)];
r{9}=[X(69:72,:)];
r{10}=[X(73:74,:)];
r{11}=[X(75:76,:)];
r{12}=[X(77:78,:)];
r{13}=[X(79,:)];
r{14}=[X(80,:)];
r{15}=[X(81,:)];
r{16}=[X(82:85,:)];
r{17}=[X(86,:)];
figure
cm = colormap(jet(numel(r)));
cm = colormap(jet);
cm = colormap(jet(numel(r)));
cc = colorbar('vert');
% set(cc,'Ticks',((1:numel(UU))/numel(UU))');
% set(cc,'TickLabels',num2str(UU'));
% set(cc, ...
% 'Ticks',log10([1e-9 1e-8 1e-7]), ...
% 'TickLabels',{'10^{-9}' '10^{-8}' '10^{-7}'});
% clim(log10([1e-9 2e-7]));
ticks = ceil(log10(UU(1))):floor(log10(UU(end)));
set(cc, ...
'Ticks',ticks, ...
'TickLabels',sprintfc('10^{%d}',ticks));
clim(log10([min(UU) max(UU)]));
ylabel(cc,'Peak dynamic strain')
hold on
for k = 1:numel(r) % ... Then, Remove The 'NaN' Elements ...
ra = r{k};
ra = ra(~isnan(ra));
[f ,x ] = ecdf(ra);
[x ,ia ,ic ] = unique(x);
f = f(ia );
xx = linspace(min(x ),max(x ),100);
ff = interp1(x ,f ,xx );
ffs = smoothdata(ff , 'loess',20);
dx = mean(diff(xx ));
dfdxs = gradient(ffs )./dx ;
plot(xx , dfdxs , '-', 'linewidth', 1, 'Color',cm(k,:))
ylim([0, 8])
xlabel('R')
ylabel('Probability density')
caption = sprintf('Case 1:Events with R<0.5');
sgtitle(caption);
end
hold off
grid
0 Comments
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!