MATLAB Answers

Somehow the 2nd X-Axis is not what it seems

6 views (last 30 days)
Harry MacDowel
Harry MacDowel on 1 Oct 2011
I am plotting a 2nd y-axis to my existing codes without any data on it so I am actually 'converting' from one to the other, as below:-
ylimit = [0,35];
ytic = [0 5 10 15 20 25 30 35];
plot(x,y);
ax1 = gca;
set(ax1,'ylim',ylimit,'ytick',ytic);
ax2 = axes('Position',get(ax1,'Position'),'YAxisLocation','right','Color','none','YColor','blue','YMinorTick','on');
set(ax2,'ylim',tan(degtorad(ylimit)),'ytick',tan(degtorad(ytic)),'xtick',get(ax1,'xtick'),'xticklabel',[]);
Everything looks good when it is plotted. BUT, when I am enlarging the figure, it seems like the 2nd y-axis is actually not aligning its position of x=0 with ax1, with a black line distinguishing it. I printed the graph using 'print' function and still I am seeing the same thing.
I tried a lot of other ways but still couldn't get it.
I would appreciate your help a lot! Thanks!
  2 Comments
Harry MacDowel
Harry MacDowel on 1 Oct 2011
Sorry for the lack of information. I am doing a semilogx plot, then on top of the existing y axis I plot another y-axis on the right side.
Actually I solved the problem. Apparently by first setting the position of the figure plot as large as possible, then the second y-axis would not have the slight change when it is enlarged (a little, since I am using as big as the screen figure size) and shrunk.
Funny little bug.

Sign in to comment.

Answers (3)

Harry MacDowel
Harry MacDowel on 1 Oct 2011
The following code before the figure is plotted solve the apparent bug:-
set(figurehnd,'position',[1 47 1440 786]);
which is almost as large as the size of my screen.
Does anyone have any other approach or an explanation whether this is a bug of Matlab?
I leave this question open still.
  1 Comment
Harry MacDowel
Harry MacDowel on 1 Oct 2011
AHA! I tried shrinking it to a quarter of its size then this time the x-axis of the 2nd y-axis appear to be underneath the existing one instead of over it, as stated in my question.
In fact I often wonder why Matlab does not provide an in-house function which allows users to define a 2nd y-axis on the right side of the plot easily.

Sign in to comment.


Walter Roberson
Walter Roberson on 2 Oct 2011
Looks like a case for plotyy() or linkaxes()
  1 Comment
Harry MacDowel
Harry MacDowel on 2 Oct 2011
Tried them both and they just mess up the plot.

Sign in to comment.


Harry MacDowel
Harry MacDowel on 2 Oct 2011
Anyway I tried several more methods including those suggested by Walter.
My conclusion of solving this problem is as follows:-
1) If one were to provide a 2nd y-axis which has exactly the ytick position and just different values (a conversion factor applied, for example the 1st y-axis is meter and the 2nd y-axis is feet), then the following code shall do:-
ylimit = [0,35];
ytic = [0 5 10 15 20 25 30 35];
y2str = num2str(tan(degtorad(ytic')));
ax1 = gca;
set(ax1,'ylim',ylimit,'ytick',ytic);
ax2 = axes('Position',get(ax1,'Position'),'YAxisLocation','right','Color','none','YColor','blue','YMinorTick','on');
set(ax2,'ylim',ylimit,'ytick',get(ax1,'ytick'),'xtick',get(ax1,'xtick'),'xticklabel',[],'yticklabel',y2str);
set(ax2,'YMinorTick','on');
The key is to replace the strings in second y-axis. In order to avoid the somehow-will-displace-a-little-upon-maximizing-or-minimizing-the-figure-window problem, just add:
set(figurehnd,'position',[1 47 1440 786]);
where the last 2 values are both the width of my screen and the height of the figure, measured from the upper corner of my taskbar to the top.
2) If you wish to do another scale, just follow my previous answer.

Tags

Community Treasure Hunt

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

Start Hunting!