如何使用python绘制ployfit n log n?

时间:2015-04-27 00:41:54

标签: python numpy matplotlib

下面是我的代码的摘录,它根据给予numpy.polyfit库的顺序绘制并创建趋势线。我能够绘制线性,二次和许多其他多项式趋势。但是,我无法为可能符合log(n)或n log(n)趋势的数据创建趋势线。

任何点击怎么去做这个?

import numpy as np
from matplotlib import pyplot, pylab

def plotChart(title, xlabel, ylabel,x,y,fit):
    plot1 = pyplot.plot(x,y,"o",label="runtime")
    plot2 = pyplot.plot(x,fit(x),"--", label="trendline")
    pylab.title(title)
    pylab.ylabel(ylabel)
    pylab.xlabel(xlabel)
    pyplot.legend()
    pyplot.tight_layout()
    pyplot.show()

def analyzeTimes(sampleList,timingList,order,title,xlabel,ylabel):
    x = np.array(sampleList)
    y = np.array(timingList)
    coefficients = np.polyfit(x,y,order)
    fit = np.poly1d(coefficients)

    plotChart(
        title + "\n %s"%(fit), 
        xlabel, 
        ylabel,
        x,y,fit)

1 个答案:

答案 0 :(得分:3)

您可以将log(n)和nlog(n)视为一阶多项式,其中x值为log(n)或nlog(n)。也就是说,您在拟合之前使用log(n)或nlog(n)并将其用作polyfit的输入。这是log(n)的一个例子:

import numpy as np
from matplotlib import pyplot as plt

# Fake Data 
x = range(1,101)
y = 5 * np.log(x) + np.random.rand(len(x))

# Fit 
coefficients = np.polyfit(np.log(x),y,1) # Use log(x) as the input to polyfit.
fit = np.poly1d(coefficients) 

plt.plot(x,y,"o",label="data")
plt.plot(x,fit(np.log(x)),"--", label="fit")
plt.legend()
plt.show()

enter image description here

如果您使用的其他功能不能简化为多项式,您可以使用scipy库中的curvefit