how to set y-axis as log scale?

4,489 次查看(过去 30 天)
I am plotting x-y plot using plot function. I want to set only y-axis as log scale and x-axis as linear? How to do that? I used loglog function but it scales both axis but I want only Y.

采纳的回答

Walter Roberson
Walter Roberson 2023-9-22
编辑:MathWorks Support Team 2023-9-22
The best way to create that type of axes is to use the semilogy function. Alternatively, you can set the ‘YScale’ property on the axes:
set(gca, 'YScale', 'log')
***Update from Mathworks Support Team - September 2023***
As of R2023b, you can also use the 'yscale ' function. 
  22 个评论
Mr Thadi
Mr Thadi 2024-7-4,5:31
Thank you Mr walter,
i have attached one image,
in that my data file having values from 100 to 14000.
if i plot histogram without x axis set properties it showing like figure 'A', in that bins starts from 0-300,300-600...etc like that.
but if i use set (gca,'xscale','log') command to the x scale it showing initial bin from 300-600,600-900....etc.you can see in figure 'B'
my question is what about values in between 0-300 from figure 'B' , why these are not appearing how to solve it,if i want to get xscale in log values histogram initial bin from 0-300,300-600...etc are needed to change properties in that to command?can you please explain me
i can provide my data file also to you
Adam Danz
Adam Danz 2024-7-12,15:08
This issue arises because the first bin edge is at x=0 and log(0)=-inf which cannot be represented graphically.
Assuming there are no data less than or equal to 0 and no bin edges less than 0, you could set the first bin edge according to the smallest value in the data.
x = rand(1,1000)*10000;
minPositiveValue = min(x(x>0),[],'all');
minbin = 10^floor(log10(minPositiveValue));
ax = axes();
h = histogram(ax, x);
ax.XScale = 'log';
if h.BinEdges(1) == 0
h.BinEdges(1) = minbin;
end

请先登录,再进行评论。

更多回答(2 个)

Toshia M
Toshia M 2023-9-20
Starting in R2023b, you can change the scale of any axis after you create the plot by calling the xscale, yscale, or zscale function.
For example, create a plot of two vectors x and y. Then set the scale of the y-axis to logarithmic.
x = 1:100;
y = x.^2;
plot(x,y)
grid on
yscale log

Rohit Sinha
Rohit Sinha 2022-4-27
The easiest way to do this is simply use the following command instead of plot
semilogy(x,y);
This will plot x axis on a linear scale and y axis on a log scale. Similarly, if you want to plot x axis on log scale and y axis on a linear scale, you can use
semilogx(x,y) ;
  2 个评论
Walter Roberson
Walter Roberson 2022-4-27
semilogy() is the first thing I mentioned in my answer in 2016.
Nicholas Santiago
Nicholas Santiago 2022-11-4
yo i totally missed that I generally only read the bold stuff, thanks a ton!

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Annotations 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!

Translated by