Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中散点图下的面积_Python_Plot_Auc - Fatal编程技术网

python中散点图下的面积

python中散点图下的面积,python,plot,auc,Python,Plot,Auc,我有两个数字列表,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 = su

我有两个数字列表,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点的下方,我会对X进行排序。如果你想得到曲线下的面积,即使考虑到它本身是双倍的,我会在for循环中取x的绝对值。abs()

如果希望曲线下的面积不重复计算点[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]对的顺序连接线,则会得到图形正下方的区域


我希望这有助于回答你的问题

有什么原因不能对X进行排序吗?事实上,我只是想知道,是否有任何方法可以不进行排序就计算AUC。如果不对点进行排序,那么曲线就是这样的。在这种情况下,您希望AUC是什么?