为时间实现 ipywidget 滑块

Implementing ipywidget slider for time

我正在尝试使用 ipywidgets 在 Jupyter Notebook 中创建时间滑块。我想获取表格化的实验数据(见下图)并借助滑块控制值范围。该图应该是一个力-位移图,随时间演变:

这是我的 python 代码:

from ipywidgets import IntSlider, interact, FloatSlider

u = fdat1['C_1_Weg_R4[mm]'].values
f = fdat1['C_1_Kraft_R4[kN]'].values
t = fdat1['S/No'].values

@interact(t = IntSlider(min = 0, max = max(fdat0['S/No'].values)))
def aa_(t):
    plt.plot(f[t],u[t])
    plt.grid()
    plt.xlabel("force [kN]")
    plt.ylabel("displacement [mm]")
    plt.title("Load-displacement curve for \nexperiment")

fdat1 是列表数据的名称。我也考虑过使用 "C_1_Zeit[s]" 列作为我的滑块值,但这些不是整数值。

问题是没有绘制任何东西,但滑块起作用并且图形改变了比例。

我已经在线搜索了一段时间,非常感谢您的帮助。

提前致谢!

编辑:

from ipywidgets import IntSlider, interact, FloatSlider

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame.from_records(
    [np.linspace(0,30, num=30), np.linspace(0,20, num=30), ]).T

df.columns=['A', 'B']

@interact(t = IntSlider(min = 0, max = 21))
def aa_(t):
    plt.scatter(df['A'], df['B'])
    plt.grid()
    plt.xlabel("force [kN]")
    plt.ylabel("displacement [mm]")
    plt.title("Load-displacement curve for \nexperiment")
    plt.xlim(0, 30)
    plt.ylim(0, 30)

在您的绘图函数中,根据滑块值创建 results 数据框的切片。

from ipywidgets import IntSlider, interact, FloatSlider

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

results = pd.DataFrame.from_records(
    [np.linspace(0,30, num=30), np.linspace(0,20, num=30), ]).T

results.columns=['A', 'B']

@interact(t = IntSlider(min = 0, max = 21))
def aa_(t):
    df = results.iloc[:t]    # make the slice here
    plt.scatter(df['A'], df['B'])
    plt.grid()
    plt.xlabel("force [kN]")
    plt.ylabel("displacement [mm]")
    plt.title("Load-displacement curve for \nexperiment")
    plt.xlim(0, 30)
    plt.ylim(0, 30)

所以,基本上,这应该是正确的代码:

from ipywidgets import IntSlider, interact, FloatSlider

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


u = fdat1['C_1_Weg_R4[mm]'].values     #loads displacement values from fdat1
f = fdat1['C_1_Kraft_R4[kN]'].values   #loads force values from fdat1


df = pd.DataFrame.from_dict([u,f]).T   #creates a dataframe

df.columns=['A', 'B']

@interact(t = IntSlider(min = 0, max = df.shape[0]))   #interactive scatterplot with a slider for time
def scatterplot_(t):
    plt.scatter(df.loc[0:t,'A'], df.loc[0:t,'B'])
    plt.grid()
    plt.xlabel("force [kN]")
    plt.ylabel("displacement [mm]")
    plt.title("Load-displacement curve for \nexperiment")
    plt.xlim(-5, 5)
    plt.ylim(-25, 25)