Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotting errorbars in the logarithmic domain with negative values (Matlab)

I have a vector, call it x, which contains very small numbers that I calculated from a mean. I'd like to plot the logarithmic transform of x, say y=10*log10(x), along with errorbars equal to +- 2 standard deviations calculated when finding the mean.

To do this, I'm using the following code:

figure
errorbar(lengths, 10*log10(x), ...
    10*log10(x-2*std_x), 10*log10(x+2*std_x), 'o')

My problem is that since x contains such small values, x-2*std_x is usually a negative number, and you can't take the log of negative numbers.

So I suppose my question is how can I plot errorbars in the logarithmic domain when subtracting the standard deviation in the linear domain gives me negative numbers? I can't do the +-

like image 654
Josiah Avatar asked Mar 25 '26 07:03

Josiah


2 Answers

Actually you're calling errorbar wrong. You should call

figure
errorbar(lengths, 10*log10(x),10*log10(2*std_x), 'o')

If std_x is too small for this to work, you can write your own version of errorbar by plotting vertical lines from 10*log10(x-2*std_x) to 10*log10(x+2*std_x)

like image 176
Jonas Avatar answered Mar 28 '26 03:03

Jonas


use errorbar in the two error configuration, then change the y-axis to be logarithmic:

eps = 1E-4;  %whatever you consider to be a very small fraction
ebl = min(2*std_x, x*(1-eps));
ebu = 2*std_x;
errorbar(lengths, x, ebl, ebu, 'o');
set(gca, 'YScale', 'log');

you may want to adjust your yaxis range manually using ylim

like image 44
Marc Avatar answered Mar 28 '26 03:03

Marc