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일

58 개 추천

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. 

댓글 수: 23

Nick Durkee
Nick Durkee 2017년 6월 14일
Note that this works for 3D plots as well. Not sure if there's an equivalence of semilogx for 3d.
set(gca, 'XScale', 'log')
Mahender Aroori
Mahender Aroori 2019년 1월 11일
thank you
Elkin Javier Cepeda Ramirez
Elkin Javier Cepeda Ramirez 2019년 5월 3일
이동: Adam Danz 2023년 6월 22일
thank you , you help me too much
M S Rashed
M S Rashed 2019년 5월 20일
Is there any way to convert from log-scale back to linera scale?
set(gca, 'XScale', 'linear')
Hazem Mubarak
Hazem Mubarak 2019년 12월 30일
이동: Adam Danz 2023년 6월 22일
Thanks ;)
In-chan Kim
In-chan Kim 2020년 4월 30일
Is there a way to make set(gca, 'YScale', 'log') show negative values as well?
Walter Roberson
Walter Roberson 2020년 4월 30일
The log of negative real values is equal to the log of the positive value, plus (pi*1i) -- that is the result is complex. When you set YScale to log, then internally it would take the log of the negative values you have, and would found that the log is complex.
If, hypothetically, it were able to display with complex coordinates, where would you want the values displayed? For example do you want the complex portion of the coordinate to be treated as time, and the display should automatically cycle through a time period (perhaps every 2*pi seconds) with the negative values being displayed for one frame on each occasion that the complex value projected down to real?
If you want negative values to be displayed where the corresponding positive value would be displayed, then plot with abs(y) instead of y.
Remember, when you use log, there is an infinite distance in log scale between y = 1 and y = 0, since it has to pass through y = exp(-1), y = exp(-2), y = exp(-3), and so on, each of which needs to be allocated the same screen distance as between y = exp(0) and y = exp(1) . To get to negative y, you would have to go "further than infinity" down the bottom of the plot.
Brad Norton
Brad Norton 2020년 9월 13일
what is gca?
Walter Roberson
Walter Roberson 2020년 9월 13일
ax = gca returns the current axes or chart for the current figure, which is typically the last one created or clicked with the mouse.
samane pahlevani
samane pahlevani 2021년 6월 26일
Hi . I want to plot y-axis scale as log10. how can I do that? I tried your answer but log in matlab is based on 'e' not 10!
Walter Roberson
Walter Roberson 2021년 6월 26일
How can you tell whether the y-axes scale is log10 or natural log?
The labeling is always done based on log10, no matter whether the underlying graph is log10 or log e.
Suppose the calculation were done log B for some base B. Then log[B](x) = log[e](x) * log[e](B) which is a constant multiple relative to log[e] . The constant multiple would alter how much height the graph would need, but as a magnification, not as a change to the shape of the graph. And the size available to plot into is fixed, so MATLAB is just going to rescale anyhow...
samane pahlevani
samane pahlevani 2021년 6월 30일
I'm really grateful for your help. I completely figured out your answer. Just about the formula which you wrote, I suppose that the accurate form would be: log[B](x) = log[e](x) / log[e](B)
Walter Roberson
Walter Roberson 2021년 7월 1일
You are correct, it should have been division not multiplication.
Samuel Pulpan
Samuel Pulpan 2022년 1월 15일
이동: Adam Danz 2023년 6월 22일
Thanks
Weirong Sun
Weirong Sun 2022년 5월 9일
good answer! It's very helpful!!!
mingyang zhao
mingyang zhao 2023년 8월 2일
Great answer! Thank you!
Mr Thadi
Mr Thadi 2024년 7월 3일
can you please tell me what is significance of 'gca'?how it helps
Walter Roberson
Walter Roberson 2024년 7월 3일
When you use set(), you need to indicate which object you want to set parameters for. We assume that you want to set parameters for the current axes. The short form of indicating the current axes is to use gca
Mr Thadi
Mr Thadi 2024년 7월 4일
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
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
Mr Thadi
Mr Thadi 2024년 9월 29일
Thank you Mr Adam Danz

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Toshia M
Toshia M 2023년 9월 20일

6 개 추천

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일

4 개 추천

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!

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Creating, Deleting, and Querying Graphics Objects에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

질문:

2016년 4월 15일

댓글:

2024년 9월 29일

Community Treasure Hunt

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

Start Hunting!

Translated by