How to avoid log(0) within an area plot?

13 visualizaciones (últimos 30 días)
Rene
Rene el 8 de Dic. de 2013
Editada: Rene el 8 de Dic. de 2013
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.

Respuestas (2)

Azzi Abdelmalek
Azzi Abdelmalek el 8 de Dic. de 2013
Editada: Azzi Abdelmalek el 8 de Dic. de 2013
Y(~Y)=1
plot(y)
set(gca,'yscale','log')
  1 comentario
Rene
Rene el 8 de Dic. de 2013
Editada: Rene el 8 de Dic. de 2013
Thanks Azzi, but here I'm facing the situation that the areas aren't filled with the color they are supposed to. They are filled with color of the axis.Do you happen to know how I can fill the areas below the plots?

Iniciar sesión para comentar.


Wayne King
Wayne King el 8 de Dic. de 2013
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 comentarios
Wayne King
Wayne King el 8 de Dic. de 2013
Editada: Wayne King el 8 de Dic. de 2013
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.
Rene
Rene el 8 de Dic. de 2013
You're right. I only set the log() instead of log10(). Thanks for the hint. With Azzis hint it worked quite well for the y-axis. but now the areas aren't filled with any color but the axis color.

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by