Modifying Figure Y-Axis Exponent Parameter After YTickLabels are Modified

3 visualizaciones (últimos 30 días)
Hello,
simply put, I have a figure in which I want to mark a certain YTickLabels as text, instead of value.
It all goes well, but by doing so, the exponent marker on the Y-Axis is gone. Forcing to set the value of 'Exponent' property of the YAxis doesn't work either. I guess it's because the Y-Axis ruler now has both number and text, so there is no proper scaling there.
I wonder if there is any workaround to this. Of course it is possible to add the exponent manually later, but I kind of want to have a procedural method for consistency.
The code below will demonstrate what I meant.
% Plot Data
figure(1);
t = linspace(0,1,100);
y = 0.005*sin(2*pi/0.01*t);
plot(t,y);
hold on;
plot(xlim,[0 0],'k--');
grid on;
% Adding a line of interest
yval = 0.001;
plot(xlim,[yval yval],'k-');
hold off;
% Modify YTicks to Min-Y, 0, YVal, Max-Y
yticks = get(gca,'YTick');
yticks = sort([min(yticks),0,yval, max(yticks)],'ascend');
% Modify YTickLabels
ylabels = get(gca,'YTickLabel');
ylabels(3) = {'YVal'};
set(gca,'YTickLabel', ylabels);
set(get(gca,'YAxis'),'Exponent',-3); %--> This doesn't work now

Respuesta aceptada

dpb
dpb el 21 de Mayo de 2020
Editada: dpb el 21 de Mayo de 2020
Don't use manual labels on ticks, just don't put ticks at the unwanted places. When write labels, the EponentMode is set to 'Manual' and then the exponent display goes away.
hL=plot(t,y);
hold on
yline(yval)
yl=ylim;
yticks([yl(1) 0 yl(2)])
hTxt=text(-0.01,yval,'YVal','HorizontalAlignment','right');
produces
BTW, you alias the MATLAB builtin yticks function above; don't do that! Makes high probability of coding errors later when want to use it.
Another alternative would be to not try to futz with the axis label but use the annotation/label of the yline object instead. It will be on the line inside the graph area but doesn't require the other manipulations to not write the one tick value. And, if yval isn't some nice even number always, that doesn't match up nicely with where tick marks logically go, it isn't affected.
A possible enhancement request for the yline object might be an 'outside' position key value--altho it raises the problem of potential clash with tick labels but a smart implementation could deal with it.
  1 comentario
Innocentio Loe
Innocentio Loe el 22 de Mayo de 2020
Hello,
thank you very much, that worked like a charm. I thought the "text" function was only useful to put things inside the figure axes, but turns out it can write outside the bounds too.
Thanks for pointing out the issue with "yticks" variable as well.

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by