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 +-
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)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With