How to change the marking in colorbar?
    8 views (last 30 days)
  
       Show older comments
    
    Athira T Das
 on 20 Apr 2023
  
    
    
    
    
    Answered: Walter Roberson
      
      
 on 20 Apr 2023
            How to change the colorbar marking uniformly?
clc;close all;clear all;
lambda=532
w0 = 1;         % beam waist
z = 0;          % propagation distance
k = 2*pi/lambda; % wave number
l = 1;          % topological charge
x = linspace(-5*w0,5*w0,256);  % x-axis grid
y = linspace(-5*w0,5*w0,256);  % y-axis grid
[X,Y] = meshgrid(x,y);         % create meshgrid
R = sqrt(X.^2 + Y.^2);
phi = atan2(Y,X) + l*atan2(R,z);
u = exp(-(X.^2 + Y.^2)/w0^2) .* exp(1i*phi);
figure;
imagesc(x,y,angle(u));
colormap('hsv');
axis equal tight;
xlabel('x');
ylabel('y');
cb = colorbar;
cb.Ticks = [0  0.5  1];
cb.TickLabels = {'0',  'pi/2',  '2pi'};
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 20 Apr 2023
        lambda=532
w0 = 1;         % beam waist
z = 0;          % propagation distance
k = 2*pi/lambda; % wave number
l = 1;          % topological charge
x = linspace(-5*w0,5*w0,256);  % x-axis grid
y = linspace(-5*w0,5*w0,256);  % y-axis grid
[X,Y] = meshgrid(x,y);         % create meshgrid
R = sqrt(X.^2 + Y.^2);
phi = atan2(Y,X) + l*atan2(R,z);
u = exp(-(X.^2 + Y.^2)/w0^2) .* exp(1i*phi);
figure;
angu = angle(u);
imagesc(x,y,angu);
colormap('hsv');
axis equal tight;
xlabel('x');
ylabel('y');
caxis
[min(angu(:)), max(angu(:))]
cb = colorbar;
cb.Ticks = [0  0.5  1];
cb.TickLabels = {'0',  'pi/2',  '2pi'};
Your actual data being drawn ranges from pretty much 
 to 
 . imagesc() leaves the data alone but changes the CLim (color axes limits) to match the actual range of data. You then ask for tick marks at the absolute positions 0, 0.5, and 1, rather than at some kind of relative position. 
You also label with 0 to 
 even though the values are 
 to 
 
I would suggest that what you want is
w0 = 1;         % beam waist
z = 0;          % propagation distance
k = 2*pi/lambda; % wave number
l = 1;          % topological charge
x = linspace(-5*w0,5*w0,256);  % x-axis grid
y = linspace(-5*w0,5*w0,256);  % y-axis grid
[X,Y] = meshgrid(x,y);         % create meshgrid
R = sqrt(X.^2 + Y.^2);
phi = atan2(Y,X) + l*atan2(R,z);
u = exp(-(X.^2 + Y.^2)/w0^2) .* exp(1i*phi);
figure;
angu = angle(u);
imagesc(x,y,angu);
colormap('hsv');
axis equal tight;
xlabel('x');
ylabel('y');
caxis([-pi pi])
cb = colorbar;
cb.Ticks = [-pi  0  pi];
cb.TickLabels = {'-\pi',  '0',  '\pi'};
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

