Python3 / Matplotlib:尝试在对数 - 对数比例上绘制直线,导致部分曲线

时间:2017-11-27 17:34:20

标签: python matplotlib

我试图绘制一条直线(线性斜率: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()

输出如下:

enter image description here

谁能告诉我哪些错误以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

本身并没有“错误”:一帧中的直线不一定是另一帧中的直线。这是其中一种情况。

直线相当于具有恒定斜率。您在此处绘制的内容,以“正常”比例解释,是点( log(x), log(y) )。 只要数量很大,这似乎也是对数对数刻度上的直线。超过x = 15的任何给定点的斜率接近k

但是,当x更接近0时,切线在分子和分母中都包含+b项。 会抛弃您期望的值。 y = kx + b是线性的,但您的比率log(y) / log(x)不是。

尝试打印1-10范围内的图形,您将看到更好放大效果。