6 views (last 30 days)

Hello everyone,

I have the following arrays: spatial_grid(30001x1 elements), physical_time_elastic (2431x1 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.

Joseph Cheng
on 20 Feb 2020

Edited: Joseph Cheng
on 20 Feb 2020

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.

Joseph Cheng
on 20 Feb 2020

you shouldn't just implement but digest what is going on. by doing axes afer imagesc you created a new axes inside the figure.

again just use caxis() function like you would xlim, ylim or zlim to set the limits in a plot if you are not familiar with matlab graphical handles.

see example:

figure(1);

dummydata = randi(10,10,10);

subplot(121),imagesc(dummydata )

caxis([0 10])

colorbar

subplot(122),imagesc(dummydata ),caxis([0 50])

colorbar

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.