2017-11-27 3 views
0

私は直線を描こうとしました(線形勾配:、線形定数(=オフセット)b = 6.300735205027388 [これらの数値は私のデータから計算されたものです私はベストフィットラインをプロットしようとしていますが、対数最適ラインのプロットに関連する2つの答えを試しましたが、matplotlibを使ってlog-logスケールに変換することはできませんでした)結果の線は上にカーブがあるように見えます。ここに私のコードは次のとおりです。Python3/Matplotlib:ログログスケールの直線を部分的に曲線で描こうとします

enter image description here

誰もが間違って何を教えてもらえますし、どのようにこの問題を解決するには、次のよう

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() 

出力がありますか?

答えて

1

定義した関係は、ログ・ログ・ドメインでは線形ではありません。それが直線であるためには、log(x)をlog(y)に代入し、y = m * x + bのような式で終わらせる必要があります。

y値の定義では、xの各値に1を加えました。得られた関係は、次のようになります

enter image description here

できできない代替ログ(Y) - (Y)とログ(X)> - > X最初のx変数を変換せず。言い換えれば、log(x)対log(y)の線形関係ではないので、直線を期待するべきではありません。

+1nで洗い流され、nが大きくなるため、グラフの左側の近くでのみ曲がっているのが理由です。

直線を取得するには、あなたがmath.log(n+1, 10)

vaakaplot = range(1, 16308+ext) 
pystyplot = [10**(k*(math.log(n, 10))+b) for n in vaakaplot] 

math.log(n, 10)に変更することができ
1

「間違った」ものは何もありません。1つのフレームの直線は必ずしも別の直線の直線ではありません。これらのケースの1つです。

直線は一定の傾きを持つことに相当します。あなたがここでプロットしているのは、「普通」の尺度で解釈される、点(log(x), log(y))です。 量が多い限り、これはログ・ログ・スケール上の直線であるように見えます。約x = 15を過ぎた任意の点における勾配はkに近い。

ただし、xが0に近い場合、接線には分子と分母の両方に+bという項が含まれます。 そのは、あなたが期待した値を投げ捨てるものです。 y = kx + bは線形ですが、あなたの比率はlog(y)/log(x)ではありません。

グラフを1〜10の範囲で印刷してみると、効果が拡大されて表示されます。

関連する問題