Log-log plot with error band that has negative numbers

4 次查看(过去 30 天)
How do I make an error band? I am attaching some sample data. The fill function generates negative numbers, so that when I try either this:
figure;
loglog(x,y)
fill([x; flipud(x)],[y-std_y;flipud(y+std_y)],'k','FaceAlpha',0.5);
or this:
figure;
plot(x,y)
fill([x; flipud(x)],[y-std_y;flipud(y+std_y)],'k','FaceAlpha',0.5);
set(gca, 'XScale','log', 'YScale','log')
The error band doesn't show up.

采纳的回答

dpb
dpb 2023-1-16
移动:dpb 2023-1-16
You simply can't plot negative numbers on a log axis...they don't exist (well, they do, but they're complex).
It's not the fill function's fault; it's that abs(std_y)>abs(y) for at least some of your y values. You'll get the same result if you just plot() y-std_y.
That's why I constrained the error magnitude in the previous example as was noted in the comments of the sample code.
  1 个评论
dpb
dpb 2023-1-17
ADDENDUM:
You could illustrate the general effect if you were to choose a lower bound decade at which to cut off the lower limit and then clip the y_lo values at that point. Remember, however, that log(0) --> -Inf so there are an infinite number of decades to desplay to cover the full range even to get to the crossing point so the best you can hope for is a very crude representation.
In that regards, drawing the boundary line could be a better alternative; while it will also not show past where the data go to zero, it will display the points that are positive which is something. fill() is a one object for the defined region; the only way to draw it would be to only define regions for which the result is positive for the lower bound area and draw multiple areas -- the positive error above the data could be one, then depending upon the shape of the data, one or more to cover the areas on the lower side that are all greater than zero. This will leave one with a truncated area on the bottom as compared to the top, of course, but not really anything can do about that other than the aforementioned truncation of values to keep all positive -- but that misrepresents the values so don't really recommend it. The best solution probably is to just forego the log axis for linear if the data really do go negative.

请先登录,再进行评论。

更多回答(0 个)

类别

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

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by