使用 log y 刻度绘制回归线
Plotting regression line with log y scale
我有两个要显示的图(原始数据及其回归线)。每当我 运行 这段代码时,回归线根本不会 运行 通过数据——我认为这与在 y 轴的对数刻度上绘制原始数据有关(我运行宁 polyfit 时尝试包括此,但我仍然有问题)。
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(a, b)
plt.yscale('log')
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.plot(a, (slope*a)+intercept)
plt.show()
您正在拟合 log(b) = slope * a + intercept,相当于 b = np.exp(slope*a + intercept).
在 matplottib 中,您要么必须使用线性比例绘制绘图 ,并将 log(b) 作为变量:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.figure()
plt.scatter(a, np.log(b))
plt.plot(a, (slope*a)+intercept)
plt.show()
在这种情况下,您不使用 plt.yscale('log')
,因为您的轴已经相对于 log(b) 进行了缩放。
另一方面,您可以绘制具有对数刻度的线性变量:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.figure()
plt.yscale('log')
plt.scatter(a, b)
plt.plot(a, np.exp((slope*a)+intercept))
plt.show()
import numpy as np
import matplotlib.pyplot as plt
def regression(m,x,b):
return m * x + b
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.figure()
plt.scatter(a, np.log(b))
plt.plot(a, regression(a,slope,intercept))
plt.show()
我有两个要显示的图(原始数据及其回归线)。每当我 运行 这段代码时,回归线根本不会 运行 通过数据——我认为这与在 y 轴的对数刻度上绘制原始数据有关(我运行宁 polyfit 时尝试包括此,但我仍然有问题)。
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(a, b)
plt.yscale('log')
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.plot(a, (slope*a)+intercept)
plt.show()
您正在拟合 log(b) = slope * a + intercept,相当于 b = np.exp(slope*a + intercept).
在 matplottib 中,您要么必须使用线性比例绘制绘图 ,并将 log(b) 作为变量:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.figure()
plt.scatter(a, np.log(b))
plt.plot(a, (slope*a)+intercept)
plt.show()
在这种情况下,您不使用 plt.yscale('log')
,因为您的轴已经相对于 log(b) 进行了缩放。
另一方面,您可以绘制具有对数刻度的线性变量:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.figure()
plt.yscale('log')
plt.scatter(a, b)
plt.plot(a, np.exp((slope*a)+intercept))
plt.show()
import numpy as np
import matplotlib.pyplot as plt
def regression(m,x,b):
return m * x + b
a = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
b = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
slope, intercept = np.polyfit(a, np.log(b), 1)
plt.figure()
plt.scatter(a, np.log(b))
plt.plot(a, regression(a,slope,intercept))
plt.show()