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

3 visualizaciones (últimos 30 días)
Harry MacDowel
Harry MacDowel el 1 de Oct. de 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 comentarios
Jan
Jan el 1 de Oct. de 2011
Please add a definition for x and y, such that we can run your code. Without this, I cannot understand the description of the error.
Harry MacDowel
Harry MacDowel el 1 de Oct. de 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.

Iniciar sesión para comentar.

Respuestas (3)

Harry MacDowel
Harry MacDowel el 1 de Oct. de 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 comentario
Harry MacDowel
Harry MacDowel el 1 de Oct. de 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.

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 2 de Oct. de 2011
Looks like a case for plotyy() or linkaxes()

Harry MacDowel
Harry MacDowel el 2 de Oct. de 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.

Categorías

Más información sobre Two y-axis en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by