Clear Filters
Clear Filters

Moving the cross point of vertical and horizontal axes to (0,0)

4 views (last 30 days)
Hello,
Does any body know that in plotting figures, how I can move the cross point of vertical and horizontal axes to (0,0)? I have figures and the horizontal and vertical axes always cross in the lowest left of the figures. How to move this point to (0,0)?
Regards,
Kourosh

Answers (2)

dpb
dpb on 2 Jul 2016
If have recent version there's now a 'center' value on the position properties. If using earlier release, just answered a short time ago-- <how-to-shift-xaxis-location-to-origin-0>
It only does the one axis, but the pattern to follow for the other should be obvious...
  3 Comments
Kourosh
Kourosh on 17 Jul 2016
Edited: dpb on 17 Jul 2016
Hi dpb,
Thanks for the answer. My Matlab is R2011b so I think I should shift the axes through your code. I tried it for both axes but there is something wrong. Could you check where I make a mistake? Many thanks.
hAx=axes; % a new axes
plot (X,Y) % plot the data...
yl=ylim; % get y-axis limits
xl=xlim % get x-axis limits
pos=get(hAx,'position'); % and axes position vector
yrat=yl(end)/(yl(end)-yl(1)); % fractional position of origin relative y range
yht=yrat*pos(4); % adjusted second axes height
pos(2)=pos(2)+pos(4)-yht; % new bottom is top position {pos(2)+pos(4)} less height
pos(4)=yht; % and new height into vector
xrat=xl(end)/(xl(end)-xl(1)) % fractional position of origin relative x range
xht=xrat*pos(3) % adjusted second axes height
pos(1)=pos(1)+pos(3)-xht % new left is right position {pos(1)+pos(3)} less width
pos(3)=xht % and new width into vector
hAx(2)=axes('position',pos,'color','none'); % second axes with this position an no color
hAx(1)=axes('position',pos,'color','none') % first axes with this position an no color
set(hAx(2),'ytick',[]) % clear unwanted ticks from showing...
set(hAx(1),'xticklabel',[]) % clear labels on first x-axis
linkaxes(hAx,'x') % and synchronize x-axes
dpb
dpb on 17 Jul 2016
If you move both x- and y-, I'd overlooked you'll need four axes, not just two to cover the ranges (one for each quadrant). At that point it's probably better to either upgrade or use IA's solution of drawing the axes manually instead.

Sign in to comment.


Image Analyst
Image Analyst on 2 Jul 2016
I don't know how. But it's easy to draw lines there.
line(xlim, [0,0], 'LineWidth', 2, 'Color', 'k');
line([0,0], ylim, 'LineWidth', 2, 'Color', 'k');
Removing tick marks and labels and moving them to those new axes you just drew would be more complicated. Perhaps just having the thick lines for the axes would be good enough.

Products

Community Treasure Hunt

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

Start Hunting!