Search code examples
imagematlabplotscaleaxis

imagesc() in Matlab not showing equal axis


I use the following lines of code to plot the images:

for t=1:subplotCol
    subplot(subplotRow,subplotCol,t)
    imagesc([1 100],[1 100],c(:,:,nStep*t));
    colorbar
    xlabel('X-axis')
    ylabel('Y-axis')
    title(['Concentration profile at t_{',num2str(nStep*t),'}'])

    subplot(subplotRow,subplotCol,subplotCol+t)
    hold on;
    plot(distance,gamma(:,1,t),'-ob');
    plot(distance,gamma(:,2,t),'-or');
    plot(distance,gamma(:,3,t),'-og');
    xlabel('h');ylabel('\gamma (h)');
    legend(['\Theta = ',num2str(theta(1))],...
        ['\Theta = ',num2str(theta(2))],['\Theta = ',num2str(theta(3))]);
end

I get the following subplot with images:

enter image description here

As you can see the images in first row are now scaled equally on X and Y axis (Y axis is longer than the X-axis) even though the size of the image matrix is 100x100 for each image on first row.

Can someone help with how to make images in first row look like squares than rectangles which I get currently. Thanks.


Solution

  • Use the dataAspectRatio properties of the axes, and set it to [1 1 1]

    %# create a test image
    imagesc(1:10,1:10,rand(10))
    

    enter image description here

    %# you should use the handle returned by subplot
    %# instead of gca
    set(gca,'dataAspectRatio',[1 1 1])
    

    enter image description here