簡體   English   中英

在對數 - 對數圖上繪制最佳擬合直線

[英]Plot straight line of best fit on log-log plot

有一些數據我已經繪制在對數 - 對數圖上,現在我想通過這些點擬合直線。 我嘗試了各種方法,無法得到我想要的東西。 示例代碼:

import numpy as np
import matplotlib.pyplot as plt
import random

x= np.linspace(1,100,10)
y = np.log10(x)+np.log10(np.random.uniform(0,10))
coefficients = np.polyfit(np.log10(x),np.log10(y),1)
polynomial=np.poly1d(coefficients)
y_fit = polynomial(y)
plt.plot(x,y,'o')
plt.plot(x,y_fit,'-')
plt.yscale('log')
plt.xscale('log')

這給了我一個理想的“直線”在log log偏移線上的一個隨機數,然后我擬合了1d poly。 輸出是:

在此輸入圖像描述

因此忽略我可以處理的偏移量,它不是我需要的,因為它基本上繪制了每個點之間的直線然后將它們連接起來,而我需要在它們中間的“最佳擬合線”所以我可以測量它的梯度。

實現這一目標的最佳方法是什么?

一個問題是

y_fit = polynomial(y)

你必須插入x值,而不是y ,才能獲得y_fit

另外,使用log10(x)擬合log10(y) ,因此要評估線性插值器,必須插入log10(x) ,結果將是y值的基數10對數。

這是您腳本的修改版本,后面是它生成的圖表。

import numpy as np
import matplotlib.pyplot as plt
import random


x = np.linspace(1,100,10)
y = np.log10(x) + np.log10(np.random.uniform(0,10))

coefficients = np.polyfit(np.log10(x), np.log10(y), 1)
polynomial = np.poly1d(coefficients)
log10_y_fit = polynomial(np.log10(x))  # <-- Changed

plt.plot(x, y, 'o-')
plt.plot(x, 10**log10_y_fit, '*-')     # <-- Changed
plt.yscale('log')
plt.xscale('log')

情節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM