使用 Ipywidgets 按索引交互式绘制 DataFrame
Interactive Plot of DataFrame by index with Ipywidgets
我有两个数据框:
import numpy as np
import pandas as pd
import ipywidgets as widgets
import seaborn as sns
df = pd.DataFrame(np.random.rand(6,2), index=['Nr. 1', 'Nr. 2', 'Nr. 3', 'Nr. 4', 'Nr. 5', 'Nr. 6'], columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.array([[1, 2, 3, 4]]), columns=['a', 'b', 'c', 'd'])
我想制作一个交互式绘图,我可以通过 df
的索引下拉列表来选择 DataFrame 的行。
这是我的方法:
Index= df.index.tolist()
Nr = widgets.Dropdown(options=Nr, value=Nr[0], description='Number:', disabled=False)
button = widgets.Button(description='Plot', disabled = False, button_style='', tooltip = 'Plotting', icon='check')
out = widgets.Output(layout={'border': '1px solid black'})
box = widgets.VBox([Nr, button])
def on_button_clicked(b):
with out:
ax = sns.regplot(x=df_2[0], y=df.loc[[Nr]])
button.on_click(on_button_clicked, False)
display(box)
但是,我得到这个错误:'None of [Index([Dropdown(description='Nr:', index = 4, options=('Nr. 1', 'Nr. 2', 'Nr. 3', 'Nr. 4'), value = 'Nr. 1')], dtype = 'object', name='Nr')] are in the [index]'
我错过了什么?
seaborn.regplot
使用文档中指定的长格式数据。
- 回归图必须具有 x 轴和 y 轴的数值
- 有关安装说明,请参阅 Jupyter Widgets
- 参考:
- 在
python 3.10
、pandas 1.4.2
、matplotlib 3.5.1
、seaborn 0.11.2
、notebook 6.4.8
、jupyterlab 3.3.2
、jupyterlab_widgets 1.0.0
, ipywidgets 7.6.4
import ipywidgets as widgets
from ipywidgets import interact
import pandas as pd
import numpy as np
import seaborn as sns
# create wide dataframe
df = pd.DataFrame(np.random.rand(6, 4),
index=['Nr. 1', 'Nr. 2', 'Nr. 3', 'Nr. 4', 'Nr. 5', 'Nr. 6'],
columns=['A', 'B', 'C', 'D'])
# convert the dataframe to long form
df = df.reset_index().melt(id_vars='index')
# convert the categorical value to a number with cat.codes or factorize
df['fac'], cats = df.variable.factorize()
# df['fac'] = df.variable.astype('category').cat.codes
# cats = df.variable.unique()
# display(df.head())
index variable value fac
0 Nr. 1 A 0.700304 0
1 Nr. 2 A 0.375954 0
2 Nr. 3 A 0.168559 0
3 Nr. 4 A 0.962506 0
4 Nr. 5 A 0.503662 0
互动剧情
# get the unique values from the column used to select the data
idx = df['index'].unique()
@interact(Idx = idx)
def f(Idx):
# select the relevant data
data = df[df['index'].eq(Idx)]
# plot
ax = sns.regplot(data=data, x='fac', y='value')
# set the x-ticks and labels
ax.set_xticks(df.fac.unique(), cats)
return ax
我有两个数据框:
import numpy as np
import pandas as pd
import ipywidgets as widgets
import seaborn as sns
df = pd.DataFrame(np.random.rand(6,2), index=['Nr. 1', 'Nr. 2', 'Nr. 3', 'Nr. 4', 'Nr. 5', 'Nr. 6'], columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.array([[1, 2, 3, 4]]), columns=['a', 'b', 'c', 'd'])
我想制作一个交互式绘图,我可以通过 df
的索引下拉列表来选择 DataFrame 的行。
这是我的方法:
Index= df.index.tolist()
Nr = widgets.Dropdown(options=Nr, value=Nr[0], description='Number:', disabled=False)
button = widgets.Button(description='Plot', disabled = False, button_style='', tooltip = 'Plotting', icon='check')
out = widgets.Output(layout={'border': '1px solid black'})
box = widgets.VBox([Nr, button])
def on_button_clicked(b):
with out:
ax = sns.regplot(x=df_2[0], y=df.loc[[Nr]])
button.on_click(on_button_clicked, False)
display(box)
但是,我得到这个错误:'None of [Index([Dropdown(description='Nr:', index = 4, options=('Nr. 1', 'Nr. 2', 'Nr. 3', 'Nr. 4'), value = 'Nr. 1')], dtype = 'object', name='Nr')] are in the [index]'
我错过了什么?
seaborn.regplot
使用文档中指定的长格式数据。- 回归图必须具有 x 轴和 y 轴的数值
- 有关安装说明,请参阅 Jupyter Widgets
- 参考:
- 在
python 3.10
、pandas 1.4.2
、matplotlib 3.5.1
、seaborn 0.11.2
、notebook 6.4.8
、jupyterlab 3.3.2
、jupyterlab_widgets 1.0.0
,ipywidgets 7.6.4
import ipywidgets as widgets
from ipywidgets import interact
import pandas as pd
import numpy as np
import seaborn as sns
# create wide dataframe
df = pd.DataFrame(np.random.rand(6, 4),
index=['Nr. 1', 'Nr. 2', 'Nr. 3', 'Nr. 4', 'Nr. 5', 'Nr. 6'],
columns=['A', 'B', 'C', 'D'])
# convert the dataframe to long form
df = df.reset_index().melt(id_vars='index')
# convert the categorical value to a number with cat.codes or factorize
df['fac'], cats = df.variable.factorize()
# df['fac'] = df.variable.astype('category').cat.codes
# cats = df.variable.unique()
# display(df.head())
index variable value fac
0 Nr. 1 A 0.700304 0
1 Nr. 2 A 0.375954 0
2 Nr. 3 A 0.168559 0
3 Nr. 4 A 0.962506 0
4 Nr. 5 A 0.503662 0
互动剧情
# get the unique values from the column used to select the data
idx = df['index'].unique()
@interact(Idx = idx)
def f(Idx):
# select the relevant data
data = df[df['index'].eq(Idx)]
# plot
ax = sns.regplot(data=data, x='fac', y='value')
# set the x-ticks and labels
ax.set_xticks(df.fac.unique(), cats)
return ax