Рассчитать касательную для каждой точки кривого питона в matplotlib - PullRequest
0 голосов
/ 22 октября 2019

Я сделал одну кривую с серией точек. Я хочу рассчитать градиент кривой Джиба.

plt.loglog(jieba_ranks, jieba_counts, linestyle='-', label='jieba')
plt.loglog([1,jieba_counts[0]],[jieba_counts[0],1],color='r', linestyle='--', label='zipf\'s law a =1')
plt.legend(loc="best")

plt.title("Zipf plot for jieba")
plt.xlabel("Frequency rank of token")
plt.ylabel("Absolute frequency of token")
plt.grid(True,axis="y",ls="-", which="both")

enter image description here

Редактировать: я использовал np.gradient, чтобы получить наклон кривой jieba и построить ее с помощью jieba_ranks

slope_Y = np.gradient(np.log(jieba_counts), np.log(jieba_ranks))
fig1, ax1 = plt.subplots()
ax1.plot(np.log(jieba_ranks), slope_Y)

Но созданная градиентная кривая не описывает отношения между zipf и jieba. Может быть, мне нужно рассчитать расстояние каждой точки на Zipf и Jieba. enter image description here

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

В следующий раз, когда вы зададите вопрос, было бы полезно добавить немного больше информации, возможно, даже показать нам свой сюжет. Потому что следующий пример даст плохие результаты, если ваша выборка недостаточно плотна. (если у вас плохая выборка, вы можете захотеть подогнать сплайн к своим точкам и получить тангенс этой кривой и т. д.)

Но давайте перейдем к самому простому случаю, когда ваша выборка достаточно плотная, иВаша функция не шумная. Вы можете очень легко вычислить (прямые) производные следующим образом:

import numpy as np
import matplotlib.pyplot as plt

X = np.arange(0,np.pi*2,np.pi*2/100)
Y = np.sin(X)

slope_Y = np.diff(Y)/np.diff(X)

plt.plot(X,Y)
plt.plot(X[:-1],slope_Y)

Исходная кривая - это sin (x), а производная этой кривой - cos (x), что вы можете легкопосмотрите, запускаете ли вы этот код.

Если это не решит вашу проблему, пожалуйста, включите дополнительную информацию.

Как Сэм Мейсон предложил выше, вы также можете просто использовать функцию градиента numpy.

2 голосов
/ 22 октября 2019

numpy делает доступным gradient, эта функция, вероятно, будет полезна для решения вашей проблемы

, если вы добавите данные / код к вопросу, я могу попытаться предложить что-то ещеразумный!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...