簡體   English   中英

計算 matplotlib 中曲線 python 的每個點的切線

[英]Calculate tangent for each point of the curve python in matplotlib

我用一系列點制作了一條曲線。 我想計算jieba曲線的梯度。

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

在此處輸入圖像描述

編輯:我使用 np.gradient 生成 jieba 曲線的斜率,並使用 jieba_ranks 生成 plot 它

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 上每個點的距離。 在此處輸入圖像描述

numpy使gradient可用,此 function 可能對解決您的問題有用

如果您在問題中添加數據/代碼,我可以嘗試提出更明智的建議!

下次當您提出問題時,包含更多信息會很有幫助,甚至可以向我們展示您的 plot。 因為如果您的采樣不夠密集,以下示例將給出不好的結果。 (如果您的采樣不好,您可能希望將樣條曲線擬合到您的點並獲得該曲線的切線等。)

但是讓 go 使用最簡單的情況,當您的采樣足夠密集並且您的 function 沒有噪音時。 您可以通過以下方式非常輕松地計算(前向)導數:

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),如果運行此代碼,您可以輕松看到。

如果這不能解決您的問題,請提供更多信息。

正如 Sam Mason 上面建議的那樣,您也可以簡單地使用 numpy 的漸變 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM