Two-dimensional colormap

7 次查看(过去 30 天)
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
Joseph Cheng 2020-2-20
编辑:Joseph Cheng 2020-2-20
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.
  7 个评论
Joseph Cheng
Joseph Cheng 2020-2-20
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
Roderick
Roderick 2020-2-20
I see your point about creating additional axis. The function caxis works as expected. Nothing more to ask, thank you very much for everything.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Orange 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by