MATLAB: Two-dimensional colormap

two dimensional colormap

Hello everyone,
I have the following arrays: spatial_grid(30001×1 elements), physical_time_elastic (2431×1 elements), and data_set_elastic (30001x4x2431 elements). What I want to is to plot a something like the figures that appears here: https://blogs.mathworks.com/steve/2016/04/25/clim-caxis-imshow-and-imagesc/. In my case, the x-th axis will be spatial_grid, the y-th axis the physical_time_elastic array, and the magnitude that will be encoded by colors will data_set_elastic (:,2,i), where i runs over the elements of physical_time_elastic (note that length(physical_time_elastic)=2431, as the number of elements of data_set_elastic in the third dimension). For each i, therefore, I have the value that corresponds to (spatial_grid, physical_time_elastic). What I have tried to do is the following, but it does not work:
outputdir='Figures';
u1=figure(1)
for i=1:length(physical_time_elastic)
image(spatial_grid.*(10^6),physical_time_elastic(i).*(10^(12)),data_set_elastic(:,2,i))
end
colormap jet;
axis xy;
clr1=colorbar;
xlabel('Track position, $x \, \, \left( \mu\mathrm{m} \right)$','FontSize',14,'interpreter','latex')
ylabel('Time, $t \, \, \left( \mathrm{ps} \right)$','FontSize',14,'interpreter','latex')
ylabel(clr1,'$m_x$','Interpreter','Latex','FontSize',14);
t1=title('Elastic scattering, $w_{1,2}=1/2$','FontSize',14,'interpreter','latex')
set(t1,'interpreter','latex','FontSize',14)
set(gca,'TickLabelInterpreter','latex','FontSize',14)
set(u1,'Units','Inches');
posu1=get(u1,'Position');
set(u1,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[posu1(3),posu1(4)])
saveas(gcf,fullfile(outputdir,['In-Plane_Magnetization_Distribution_Elastic_Scattering.pdf']))
Any idea? I have attached a sample of what I get. The values that appears in the colorbar are completly wrong, because the variable that it is encoded in the color has values between -1 and +1. Also the track position begins in 0 and goes to a value like 3000, increasing its value linearly.

Best Answer

I'm puzzeled by your first portion and the need for a for loop. unless you have a hold somewhere the images shouldn't be stacking and you're only doing it per item in physical_time_eleastic so you're imaging a single index at a time but without hold.... i'm not sure what is going on there.
outputdir='Figures';
u1=figure(1)
for i=1:length(physical_time_elastic)
image(spatial_grid.*(10^6),physical_time_elastic(i).*(10^(12)),data_set_elastic(:,2,i))
end
colormap jet;
in each loop you are imaging a 1x30001 image and overwriting it. as well as axes are not set correctly as your x and y do not match column row of data_set_elastic. so something else is going on there.
why don't you image the whole 2nd dimension?
here is dummy data
spatial_grid = [0:300]';
physical_time_elastic = [0:10:1000]';
data_set_elastic = 2*rand(301,3,101)-1;
u1=figure(1)
% hold on
% for i=1:length(physical_time_elastic)
% image(spatial_grid.*(10^6),physical_time_elastic(i).*(10^(12)),data_set_elastic(:,2,i))
% end
imagesc(spatial_grid,physical_time_elastic,squeeze(data_set_elastic(:,2,:))');
colormap jet;
colorbar
note squeezing data_set_elastic(:,2,:) which for you is (30001 x 1 x 2431 elements) would turn out to be (30001 x 2431 elements) which then doesn't match your 30001 for x (ie columns of the image) and 2431 for y. which is why there is a transpose of squeezing data_set_elastic(:,2,:)' .
also i'm not sure image deals with negative values which you should then use imagesc or other functions which you define the color scale.