无法在python中绘制对数日志图

时间:2016-02-29 23:08:49

标签: python matplotlib plot physics

嘿,所以我试图将年龄与变频率等变量一起绘制成旋转体。我得到了期间和期间的衍生以及相关的错误。由于频率与周期相关:

f = 1/T

其中频率为f且周期为T

然后,

df = - (1/(T^2)) * dT

其中dT和dF是周期和频率的导数

但是当涉及到绘制这个日志时,我无法在python中执行它,因为它不接受loglog绘图的负值。

我尝试过只使用绝对值但是在绘制误差条时我只得到一半的误差。有没有办法让python绘制阴性和正误差条?频率导数本身是负数。

1 个答案:

答案 0 :(得分:1)

不幸的是,log(x)不能为负数,因为log(x) = y< => 10^y = x

10 ^ y是否会变成-5?

不幸的是,10^y<=0是不可能的,因为y变为-infinity,x接近1 / infinity; x接近,但从未通过0。

是否可以绘制log(x),其中x为负?

然而,问题的一个简单解决方案是采用df的绝对值。通过这样做,负数变为正数。唯一的缺点是,在以这种方式转换数据之后,您将需要撤消转换。如果数字为负数(由于abs(df)而转为正数),则必须将其乘以-1。

您可能需要定义自己的绝对值函数,该函数记录积极所需的任何值:

changeList = []

def absRecordChanges(value):
    if value < 0 :
        value = value * -1
        changeList.append(value)
    return value

还有其他方法可以解决问题,但它们都围绕着转换数据以满足日志转换(x> 0)的条件,并将您更改的数据记录下来,以便您可以在以后更改它(在你绘制它之前)。

编辑: 在desmos中摆弄时,我能够绘制log(x),其中x是任何整数。我使用分段函数来执行此操作:{x<0:-log(abs(x)),log (x)}

def piecewiseLog(x)
    If x <= 0 :
        return -log(abs(x))
    else :
        return log(x)

由于我不熟悉matlab语法,此链接有另一种解决方案:http://www.mathworks.com/matlabcentral/answers/31566-display-negative-values-on-logarithmic-graph