python 散点图下的面积
Area under scatter plot in python
我有两个数字列表,xs 和 ys:
xs = [2, 5, 4]
ys = [6, 7, 8]
并使用 matplotlib 库绘制它们:
import matplotlib.pyplot as plt
plt.plot(xs, ys, 'bo')
现在我想计算地块下的面积。我尝试了 excel 方法:
sum = 0
for i in range(1, len(xs)):
y = ys[i] + ys[i - 1]
x = xs[i] - xs[i - 1]
sum = sum + (y/2 * x)
但答案并不总是正确的。然后尝试这个:
from sklearn.metrics import auc
print('computed AUC using sklearn.metrics.auc: {}'.format(auc(xs,ys)))
但不适用于未排序的 xs。那么如何计算地块下的面积?
您的积分公式对于离散点似乎是正确的。我无法理解您想要曲线下区域的方式。按照你写的方式,在 x 轴上未排序,它得到从点 [0] 到点 [1] 的线下面积,然后减去从点 [1] 到点 [2] 的面积。如果这是你的情况,那么它确实有效。
如果你想要他们直接在所有 3 分球下方的区域,我会排序 xs。如果你想要曲线下的面积,即使考虑到它自身的双重回归,我也会在 for 循环中取 x 的绝对值。绝对()
如果你想要曲线下的面积而不重复计算点[1]和点[2]之间的面积。我会写,
import matplotlib.pyplot as plt
xs = [2, 5, 4]
x_sort = sorted(xs)
ys = [6, 7, 8]
sum = 0
plt.plot(xs, ys, 'bo')
plt.show()
for i in range(1, len(xs)):
slope = (xs[i]-xs[i-1])/(ys[i] - ys[i-1])
delta_x = x_sort[i] - x_sort[i - 1]
delta_y = ys[i - 1] + (ys[i-1] + delta_x * slope)
sum = sum + (delta_y/2 * delta_x)
print(sum)
这会采用未排序点之间的斜率并将其应用于已排序值之间,如果您按 [xs,ys] 对的顺序连接线,则会在图表正下方提供区域。
希望对回答您的问题有所帮助。
我有两个数字列表,xs 和 ys:
xs = [2, 5, 4]
ys = [6, 7, 8]
并使用 matplotlib 库绘制它们:
import matplotlib.pyplot as plt
plt.plot(xs, ys, 'bo')
现在我想计算地块下的面积。我尝试了 excel 方法:
sum = 0
for i in range(1, len(xs)):
y = ys[i] + ys[i - 1]
x = xs[i] - xs[i - 1]
sum = sum + (y/2 * x)
但答案并不总是正确的。然后尝试这个:
from sklearn.metrics import auc
print('computed AUC using sklearn.metrics.auc: {}'.format(auc(xs,ys)))
但不适用于未排序的 xs。那么如何计算地块下的面积?
您的积分公式对于离散点似乎是正确的。我无法理解您想要曲线下区域的方式。按照你写的方式,在 x 轴上未排序,它得到从点 [0] 到点 [1] 的线下面积,然后减去从点 [1] 到点 [2] 的面积。如果这是你的情况,那么它确实有效。
如果你想要他们直接在所有 3 分球下方的区域,我会排序 xs。如果你想要曲线下的面积,即使考虑到它自身的双重回归,我也会在 for 循环中取 x 的绝对值。绝对()
如果你想要曲线下的面积而不重复计算点[1]和点[2]之间的面积。我会写,
import matplotlib.pyplot as plt
xs = [2, 5, 4]
x_sort = sorted(xs)
ys = [6, 7, 8]
sum = 0
plt.plot(xs, ys, 'bo')
plt.show()
for i in range(1, len(xs)):
slope = (xs[i]-xs[i-1])/(ys[i] - ys[i-1])
delta_x = x_sort[i] - x_sort[i - 1]
delta_y = ys[i - 1] + (ys[i-1] + delta_x * slope)
sum = sum + (delta_y/2 * delta_x)
print(sum)
这会采用未排序点之间的斜率并将其应用于已排序值之间,如果您按 [xs,ys] 对的顺序连接线,则会在图表正下方提供区域。
希望对回答您的问题有所帮助。