How to avoid log(0) within an area plot?
조회 수: 15 (최근 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!