How can I plot loglog(x,y) with experimental data including negative and less than one

조회 수: 9 (최근 30일)
I tried to plot a big set of experimental data which in 'x' axis ranges from negative data to positive, and also includes data less and more than 1.0. if I use loglog(abs(x),y) , obviously it draws both negative and positive 'x' values in one side, but I want to keep sign of 'x' values while converting to log scale. Also tried to define xlog = sign(x).*log10(abs(x)); but problem didn't solve, it is not like loglog. Any comments please how to do that?? Thanks
  댓글 수: 1
Thomas Koelen
Thomas Koelen 2015년 4월 24일
Whay do you mean by keeping the sign of the x values? you can't plot negative values on a loglog scale.

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

채택된 답변

Michael Haderlein
Michael Haderlein 2015년 4월 24일
Why do you want a logarithmic plot of this data? Usually, when using loglog (or semilog) the point is that a change from, let's say, 1e-5 to 1e-4 is about as important for understanding as a change from 10 to 100. So, relative changes matter rather than absolute changes. However, relative changes don't change the sign.
I remember once there was a similar issue, we did want to pronounce relative changes, but some data sets were positive and others were negative (no change in sign within one set). We then used abs(data) to allow for the logscale, but applied different line styles/colors to emphasize the different signs. Honestly, it's ok but not too intuitive.
  댓글 수: 1
Ray
Ray 2015년 4월 24일
Yes this is valid for my data on 'y' axis which range from 1e-5 to 1e6 , but my data on 'x' axis change from, lets say -100 to 100 with very small increments which covers -1<x<1. Obviously I don't want to see 'y' data for x = -100 and x = 100 at same place.

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

추가 답변 (2개)

MD
MD 2015년 4월 24일
There is no side (as a reference to zero) on a log scale. You can try separating your x into negatives and positives. And then plot log of absolute values on two separate graphs.
xPositive = x(x>0);
yPositive = y(x>0);
xNegative = abs( x(x<0) );
yNegative = y(x<0);
figure(1)
semilogx(xPositive, yPositive);
figure(2)
semilogx(xNegative, yNegative);

Ray
Ray 2015년 4월 24일
The data set on 'y' axis in loglog scale ranges from 1e-5 to 1e6, which is fine since all are positive,,, but the data on 'x' axis range from -100 to 100 with very small increments. Obviously I don't want to see 'y' data for x = -100 and x = 100 at the same place. Solution which comes to mind is to convert data for 'x' axis to loglog for two different region x>0 and x<0 , and then for x<0 do (-1)*loglog(abs(x)) and insert both set to a single vector,,, then finding loglog(y) vector,,, and at the end just 'plot' this two new x , y data set. I am trying to find loglog data for x and y data set without drawing it... as you know loglog is different from log10(abs(x)),,, it looks something like: x = 10^round(log10(x) + 0.5)
Any comments how to do this? Thanks

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by