Modifying Figure Y-Axis Exponent Parameter After YTickLabels are Modified

2 ビュー (過去 30 日間)
Innocentio Loe
Innocentio Loe 2020 年 5 月 21 日
コメント済み: Innocentio Loe 2020 年 5 月 22 日
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

採用された回答

dpb
dpb 2020 年 5 月 21 日
編集済み: dpb 2020 年 5 月 21 日
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 件のコメント
Innocentio Loe
Innocentio Loe 2020 年 5 月 22 日
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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeAxis Labels についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by