以对数标度绘图(Matlab)

时间:2015-09-22 17:28:52

标签: matlab plot

我有一组数据,应该以loglog比例绘制。 x值始终为正值,但y值为正值和负值。因此,loglog命令将省略负y值。但我想绘制它们:我希望y轴具有对数刻度,但是具有负值,以及正值。

基本上,如果我们有一组数据(x,y), 我想绘制:(log(x),log(y))y>0(log(x),-log(-y))y<0。我试图使用这些公式,然后使用简单的plot函数,但是使用这种方法,轴不是对数刻度。我再次希望两个轴都是对数刻度。

由于

编辑:澄清一下,我希望结果与plot(x,y)完全相同,但y轴和x轴都是对数刻度

2 个答案:

答案 0 :(得分:4)

绘制对数图有几个函数:沿y,沿x或两者: semilogysemilogxloglog。您需要loglog一个:

ypos = y(y>0); % Gets positive values
xpos = x(y>0); % Get corresponding x values
yneg = y(y<0); % Gets negative values
xneg = x(y<0); % Get corresponding x values
figure;
loglog(xpos,ypos)
hold on
loglog(xneg,-yneg, 'r')

这基本上在同一图中创建了两个图,一个具有正值,另一个具有负y值。简而言之:

figure;
loglog(x(y>0),y(y>0))
hold on
loglog(x(y<0),-y(y<0),'r')

由于对数按定义严格为正,因此无法创建负标度。你能做的就是通过设置

来给你一个幻想
set(gca, 'xdir','reverse')

这确实意味着您需要两个单独的图,以防止x轴从正数向后运行。

答案 1 :(得分:2)

正如Adriaan指出的那样,您可以使用loglog()以对数对数比例绘制数据。但是,回到问题

  

我想绘制:( log(x),log(y)),如果y> 0,和(log(x), - log(-y)),如果y <0。我试图使用这些公式,然后使用简单的绘图功能,但是这种方法的轴不是对数刻度。

您可以采用此方法,然后将轴设置为使用set(gca, 'XScale', 'log')set(gca, 'YScale', 'log')的对数对数刻度, x y 轴分别。