我有一个图,它在两个轴上都是对数的。我有 pyplot 的 loglog 函数来做到这一点。它还为我提供了两个轴上的对数刻度。

现在,使用 numpy 我将一条直线拟合到我拥有的一组点上。但是,当我在图上绘制这条线时,我无法得到一条直线。我得到一条曲线。

蓝线是所谓的“直线”。它没有被直接绘制。我想将这条直线拟合到由红点绘制的曲线

这是我用来绘制点的代码:

import numpy
from matplotlib import pyplot as plt
import math
fp=open("word-rank.txt","r")
a=[]
b=[]

for line in fp:
    string=line.strip().split()
    a.append(float(string[0]))
    b.append(float(string[1]))

coefficients=numpy.polyfit(b,a,1)
polynomial=numpy.poly1d(coefficients)
ys=polynomial(b)
print polynomial
plt.loglog(b,a,'ro')
plt.plot(b,ys)
plt.xlabel("Log (Rank of frequency)")
plt.ylabel("Log (Frequency)")
plt.title("Frequency vs frequency rank for words")
plt.show()

最佳答案

您的线性拟合不是对 loglog-plot 中显示的相同数据执行的。

像这样制作 a 和 b numpy 数组

a = numpy.asarray(a, dtype=float)
b = numpy.asarray(b, dtype=float)

现在您可以对它们执行操作。 loglog-plot 的作用是对 a 和 b 取以 10 为底的对数。你可以这样做
logA = numpy.log10(a)
logB = numpy.log10(b)

这就是对数日志图的可视化。通过将 logA 和 logB 绘制为常规图来检查这一点。对日志数据重复线性拟合,并在与 logA、logB 数据相同的图中绘制线条。
coefficients = numpy.polyfit(logB, logA, 1)
polynomial = numpy.poly1d(coefficients)
ys = polynomial(b)
plt.plot(logB, logA)
plt.plot(b, ys)

关于python - 在 matplotlib 中将直线拟合到对数曲线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30657453/

10-11 19:38