如何从图中获取变量值?

数据挖掘 Python 绘图 matplotlib
2022-03-05 17:24:03

我想知道python中是否有任何方法可以自动确定下图中标记的点a和b的值。换一种说法,当我的情节显示显着减少或显着增加后找到值。

两个木偶

如果有帮助,这是我的情节的源代码:

#load data

min_duration = data['Time_Secondes'].min()
max_duration = data['Time_Secondes'].max()
xr_ = list(range(min_duration,  max_duration,  60))
y_ = []

for i in range(0,(len(xr_)-1)):
    Time_proba_ = np.logical_and(data['Time_Secondes'].values >= xr_[i], data['Time_Secondes'].values < xr_[i+1])
    Time_proba_1_ = np.logical_and(np.logical_and(data['Time_Secondes'].values >= xr_[i], data['Time_Secondes'].values < xr_[i+1]), data['outcome'].values==1)
    y_.append(sum(Time_proba_1_ )/sum(Time_proba_))


import matplotlib
matplotlib.pyplot.plot(xr_[1:len(xr_)], y_)

```
1个回答

您正在寻找的似乎是您的数据的函数,而不是matplotlib. 我认为这是一个二阶导数问题——你关心连续线的斜率差异。

  1. [x,y]按值对数据框进行升序排序x
  2. 计算一阶离散导数delta1 = (y[i+1] - y[i]) / (x[i+1] - x[i])这告诉你每条线的斜率。
  3. 现在,您可以根据要识别的内容执行以下两项操作之一。
    1. 计算二阶离散导数delta2 = (delta1[i+1] - delta1[i]) / (x[i+1] - x[i])
    2. 计算连续斜率的差diff = delta1[i+1] - delta1[i]
  4. 选择{或}i的绝对值大于某个阈值的所有s。diffdelta2

选择所有xnp.abs(x[i]) > threshold将为您提供这些坡度大变化的 x 位置。

这是我刚刚编写的一个示例,用于识别跳转函数中的跳转x/|x|.

import numpy as np
import pandas as pd

n_data = 100

x = np.random.uniform(-10,10,n_data)
y = x / np.abs(x)

delta = [0] * n_data
diff = [0] * n_data

data = pd.DataFrame({'x':x, 'y':y})
data = data.sort_values('x')

for i in range(n_data - 1):
    a, fa = data.iloc[i]
    b, fb = data.iloc[i+1]
    diff_quot = (fb - fa) / (b-a)
    delta[i] = diff_quot

data['delta'] = delta

for i in range(n_data - 1):
    a, fa, da = data.iloc[i]
    b, fb, db = data.iloc[i+1]
    dd = db - da
    diff[i] = np.abs(dd)

data['diff'] = diff

plt.plot(data['x'],data['y'])
plt.plot(data['x'],data['diff'])

threshold = 1
jumps = [dd > threshold for dd in diff]

这是跳转函数,我们可能想要定位它的跳转

跳转功能

这是坡度差异的图表,我们看到跳跃位于附近x = 0

差异函数