我试图绘制一条直线(线性斜率:k = -1.518581016210938
,线性常数(=偏移量)b = 6.300735205027388
[这些数字是从我的数据中计算出来的,我试图绘制一个最合适的线;我尝试了几个与绘制对数最佳拟合线有关的答案,但是我无法使用matplotlib将它们工作成日志对数刻度,但是得到的线看起来像它顶部有一条曲线。这是我的代码:
import math
k = -1.518581016210938
b = 6.300735205027388
ext = 1000000
vaakaplot = range(0, 16308+ext)
pystyplot = [10**(k*(math.log(n+1, 10))+b) for n in vaakaplot]
from matplotlib import pyplot as plt
plt.xscale('log')
plt.yscale('log')
plt.plot(vaakaplot, pystyplot, 'b-')
plt.axis([1, 10**6, 1, 10**6])
plt.show()
输出如下:
谁能告诉我哪些错误以及如何解决这个问题?
答案 0 :(得分:1)
本身并没有“错误”:一帧中的直线不一定是另一帧中的直线。这是其中一种情况。
直线相当于具有恒定斜率。您在此处绘制的内容,以“正常”比例解释,是点( log(x), log(y) )
。
只要数量很大,这似乎也是对数对数刻度上的直线。超过x = 15的任何给定点的斜率接近k
。
但是,当x更接近0时,切线在分子和分母中都包含+b
项。 那会抛弃您期望的值。 y = kx + b
是线性的,但您的比率log(y) / log(x)
不是。
尝试打印1-10范围内的图形,您将看到更好放大效果。