Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

logarithmic axis when using area plots?!

Asked by arnold

arnold (view profile)

on 28 Apr 2013

Hi,

I have plot containing two area plots:

area(x1,y1);
hold on
area(x2,y2,'FaceColor','red');
axis auto;

Now I'd like to make the x-axis logarithmic via:

set (gca, 'Xscale', 'log')

This creates logarithmic x-axes, however it deletes the color of the first area plot (leaving just a line plot) and messes up the range. Any suggestions on how to create a semilog area plot with two areas?

Thanks Arnold!

PS: Sorry that the Text Markup doesn't seem to work here either (or only in my view?!)

2 Comments

the cyclist

the cyclist (view profile)

on 28 Apr 2013

Can you create a small example that exhibits the problem? I'm guessing your original plots goes through zero, which may cause the logarithmic axes problems.

arnold

arnold (view profile)

on 28 Apr 2013

Here you go

%% Example
d = 30;
x1 = 0:1:d;
y1 = exp(-0.05 * x1);
x2 = d:1:100;
y2 = y1(end)*exp(-0.2*(x2-d));
area(x1,y1);
hold on
area(x2,y2,'FaceColor','red');
hold off
axis auto
set (gca, 'Xscale', 'log');

It really seems, that the inclusion of the zero in x1 is the problem. Obviously I get why x= zero can't be displayed but since the line plot of y1 is still visible, who would have thought of that. It still seems like a bug to me, but starting at x1(2) is an option.

cheers

arnold

arnold (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Ingo Schalk-Schupp on 4 Sep 2013

The problem is that your x data contains a value of zero, the logarithm of which is undefined. There is no zero on a logarithmic axis. To avoid this, simply start your area, for instance, at an x value of 1 instead of 0:

x1 = 1:1:d;

If you additionally want a logarithmic y axis, the same problem arises because by default, the painted area face goes down to zero. However, you can specify a different BaseValue like this:

area(x2, y2, 'FaceColor', 'red', 'BaseValue', 1e0)

Cheers

0 Comments

Contact us