Площадь под точечной диаграммой в питоне - PullRequest
0 голосов
/ 15 января 2019

У меня есть два списка чисел, х и у:

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)))

но не работает для несортированных хз. Так как я могу рассчитать площадь под участок?

1 Ответ

0 голосов
/ 15 января 2019

Ваша формула интеграции выглядит правильно для дискретных точек. У меня проблемы с пониманием того, как вы хотите область под кривой. Кстати, как вы написали это, не отсортированные по оси X, это получение области под линией из точки [0] в точку [1], а затем вычитание области из точки [1] в точку [2]. Если это ваш случай, то это работает.

Если вы хотите, чтобы они находились непосредственно под всеми тремя точками, я бы отсортировал xs. Если вы хотите получить площадь под кривой, даже если учесть, что она удваивается назад, я бы взял абсолютное значение x в цикле for. абс ()

Если вы хотите область под кривой без двойного счета области между точкой [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].

Надеюсь, это поможет ответить на ваш вопрос.

...