python中散点图下的面积
我有两个数字列表,xs和ys: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 = [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是什么?