how to set log scale range

25 vues (au cours des 30 derniers jours)
Megha
Megha le 6 Août 2018
Commenté : Megha le 6 Août 2018
is it possible to set the range of matlab plot
set(gca,'XTick',(6:2:14),'XTickLabel',(6:2:14),'YTick',(1E-30:1E2:1E-22),...
'YTickLabel',(1E-30:1E2:1E-22));
However, it gives me wrong yticklabel, I want yticklabel like '1E-30', '1E-28', '1E-26', '1E-24', '1E-22'
what is the correct range (1E-30:1E2:1E-22) that i could use to define this?
  2 commentaires
Stephen23
Stephen23 le 6 Août 2018
Modifié(e) : Stephen23 le 6 Août 2018
Both the colon and linspace operators use linear steps. If you want logarithmically spaced values, then use logspace, e.g.:
>> logspace(-30,-22,5)
ans =
1e-030 1e-028 1e-026 1e-024 1e-022
But for plotting you don't need to create these labels anyway: see Jan's answer.
Megha
Megha le 6 Août 2018
Thank you stephen

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 6 Août 2018
Modifié(e) : Jan le 6 Août 2018
yt = logspace(-30, -22, 5);
set(gca, 'XTick', 6:2:14, 'XTickLabel', 6:2:14, ...
'YTick', yt, 'YTickLabel', yt, ...
'XLim', [6, 14], 'YLim', [1e-30, 1e-22], ...
'YScale', 'log');
Use logspace to get the Y-ticks. Set the ranges accordingly and set Y-scaling to logarithmic.
By the way: You do not have to define the tick labels, if they are the same as the tick values.
  3 commentaires
Jan
Jan le 6 Août 2018
Set 'YTickLabel' to:
sprintfc('10^%d', log(yt))
In modern Matlab versions try e.g. also:
compose('10^%d', -30:2:22)
Megha
Megha le 6 Août 2018
yt = compose('10^%d', -2:1:3);
set(gca, 'XTick', (1:1:6), 'XTickLabel', 1:1:6, ...
'YTick', (1E-2:1E3), 'YTickLabel', yt);
please check this, it seems there is some error somewhere

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by