How to avoid log(0) within an area plot?
13 次查看(过去 30 天)
显示 更早的评论
Hi there, I'm pretty much a greenhorn in using Matlab so and now I'm facing a problem with an area plot. I'm trying to create an area plot containing several areas.
So far so good. But when I'm setting the y-axis on logarithmic scale the colors of my areas disappear. I already found out that it is due to the zeros in my data set which I cannot avoid and I don't want to. Does anyone know how I can tell Matlab not to calculate log(0)=-Inf but leave it as a zero?
So here is what I got so far:
Magnitude4 = area(Year,M4,'FaceColor','b') axis([1960 2011 1 1500]); set(gca, 'yscale', 'log') hold on Magnitude5 = area(Year,M5,'FaceColor','r') axis([1960 2011 1 1500]); set(gca, 'yscale', 'log') hold on Magnitude6 = area(Year,M6+eps,'FaceColor','c') axis([1960 2011 1 1500]); set(gca, 'yscale', 'log') hold on Magnitude7 = area(Year,M7+eps,'FaceColor','y') axis([1960 2011 1 1500]); set(gca, 'yscale', 'log')
It would be great if anyone could help me with this issue.
0 个评论
回答(2 个)
Wayne King
2013-12-8
Instead of plotting the y-axis on a log scale, you can first take the log10() or your data and then set the -Inf to 0.
X = randi([5 10],10,10);
X(2,1) = 0;
Y = log10(X);
Y(Y== -Inf) = 0;
3 个评论
Wayne King
2013-12-8
编辑:Wayne King
2013-12-8
If you want the labels as 10^power, then see Azzi's solution. But I'm very surprised that say the maximum was only 1400, but log10() produced an 8. That doesn't make sense. Taking log10() will give a value only slightly greater than 3.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!