ploting a 2D matrix and adjusting axes

27 views (last 30 days)
Hello, I have the following code:
M = zeros(50)
for x = [20,30]
M(x,:) = 1
for y = [13,25,37]
for x = [1:20, 30:50]
M(x,y) = 1
when i get the plot, i see the y-axis is in reverse order i-e starting from 50 at the bottom. In my overall simulation this affects my results. You can see the attached picture .Figure 1 is what i want and figure 2 is what this code gives me. I need to know how can i get.

Accepted Answer

Sohaib  Bin Altaf
Sohaib Bin Altaf on 10 Jul 2018
This thing worked for me:
clear all
close all
M = zeros(50);
% draw lines
for y = [20,30]
M(:,y) = 1;
for x = [13,25,37]
for y = [1:20, 30:50]
M(x,y) = 1;
p1 = [12,48];
p2 = [39,5];
% get direction
d = p1-p2;
d = d/max(abs(d)); % limit to 1 px step size
steps = 0:1:max(abs(p2-p1));
for i=length(p1):-1:1
p_line(:,i) = round(p2(i) + steps.*d(i));
idx = sub2ind(size(M), p_line(:,1), p_line(:,2));
walls = sum(M(idx));
M(idx) = 2;
M = flipud(M)
M = rot90(M,-1)
fprintf('You passed %i walls', walls)

More Answers (1)

dpb on 7 Jul 2018
Edited: dpb on 8 Jul 2018
hAx=gca; % handle to the axes
hAx.YDir='normal'; % set Y axis direction--imagesc uses 'reverse' Y
See link to Axes Properties at
doc axes
or the higher level info under Graphics/Formatting and Annotation/Axes Appearance
xlim([0 50]), ylim([0 50])
to get the 0 origin to show, maybe??? Your array is 1,50 each direction which are the coordinates imagesc uses; by default it pads a fraction on either direction.
Without more explanation of just what it is you're really after, we're just guessing what the actual problem you perceive is...
Sohaib  Bin Altaf
Sohaib Bin Altaf on 10 Jul 2018
thanks a lot for your time. I appreciate it.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!