ves*_*and 6 python jupyter-notebook
背景:
一个类似的问题已经被问到这里,但不是很具体,而且大多只是通过参考其他来源来回答。我的案例感觉非常基本,我对找到这方面的工作示例有多么困难感到惊讶。
目标:
我只想能够从 Pandas 数据框中选择任何子集,通过使用这样的小部件来制作如下图:
我的尝试:
该widgets.SelectMultiple()小部件在docs中进行了简要描述,本节描述了如何以交互方式更改图中系列的值。我试图用 的功能替换后一个演示的核心部分widgets.SelectMultiple(),但收效甚微。
我想我真的很接近让这个工作,我希望我所要做的就是找出在标记为“#做什么!?”的部分下写什么。在下面的片段中。就像现在的代码片段一样,生成了一个小部件和图表,但它们之间没有功能链接。
我所知道的问题:
我对链接中提供的示例的复制有一些缺陷。我认为df并且widg应该包含在multiplot函数中。interactive plot功能可能也是如此。我也尝试过不同的变体,但没有成功。
片段(在 Jupyter Notebook 中使用):
# imports
%matplotlib inline
from ipywidgets import interactive
import pandas as pd
import numpy as np
from jupyterthemes import jtplot
# Sample data
np.random.seed(123)
rows = 50
dfx = pd.DataFrame(np.random.randint(90,110,size=(rows, 1)), columns=['Variable X'])
dfy = pd.DataFrame(np.random.randint(25,68,size=(rows, 1)), columns=['Variable Y'])
dfz = pd.DataFrame(np.random.randint(60,70,size=(rows, 1)), columns=['Variable Z'])
df = pd.concat([dfx,dfy,dfz], axis = 1)
#jtplot.style()
import ipywidgets as widgets
from IPython.display import display
def multiplot():
opts = df.columns.values
widg = widgets.SelectMultiple(
options=opts,
value=[opts[1]],
rows=len(opts),
description='Variables',
disabled=False)
display(widg)
# what to do!?
df.plot()
#attempts:
#df[widg].plot()
#df[widg.value[0]].plot()
interactive_plot = interactive(multiplot)
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot
Run Code Online (Sandbox Code Playgroud)
输出(有缺陷):
感谢您提供清晰的示例。不幸的是,我不确定 SelectMultiple 是否可以按照您想要的方式使用。
通常,对于交互调用,您需要一个向其传递参数的函数。您不需要在函数主体内创建小部件,interact调用应该从传递的参数中了解需要什么类型的输入小部件。
有关指定字符串选项列表的一些示例,请参见此处(https://ipywidgets.readthedocs.io/en/stable/examples/Using%20Interact.html#Widget-abbreviations)
我对您的代码进行了一些小的改动,以便与下拉选择器进行交互。我怀疑如果您想使用 SelectMultiple 而不是 Dropdown,这超出了interact功能范围。您可能需要单独创建小部件,然后使用observe.
# imports
%matplotlib inline
from ipywidgets import interactive
import pandas as pd
import numpy as np
# from jupyterthemes import jtplot
# Sample data
np.random.seed(123)
rows = 50
dfx = pd.DataFrame(np.random.randint(90,110,size=(rows, 1)), columns=['Variable X'])
dfy = pd.DataFrame(np.random.randint(25,68,size=(rows, 1)), columns=['Variable Y'])
dfz = pd.DataFrame(np.random.randint(60,70,size=(rows, 1)), columns=['Variable Z'])
df = pd.concat([dfx,dfy,dfz], axis = 1)
#jtplot.style()
import ipywidgets as widgets
from IPython.display import display
def multiplot(a):
opts = df.columns.values
df.loc[:, a].plot()
interactive_plot = interactive(multiplot, a=['Variable X', 'Variable Y', 'Variable Z'])
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot
Run Code Online (Sandbox Code Playgroud)
这是一个使用observe,一个 SelectMultiple 小部件和一个Output小部件的版本:
# imports
%matplotlib inline
from ipywidgets import interactive
import pandas as pd
import numpy as np
# from jupyterthemes import jtplot
# Sample data
np.random.seed(123)
rows = 50
dfx = pd.DataFrame(np.random.randint(90,110,size=(rows, 1)), columns=['Variable X'])
dfy = pd.DataFrame(np.random.randint(25,68,size=(rows, 1)), columns=['Variable Y'])
dfz = pd.DataFrame(np.random.randint(60,70,size=(rows, 1)), columns=['Variable Z'])
df = pd.concat([dfx,dfy,dfz], axis = 1)
#jtplot.style()
import ipywidgets as widgets
from IPython.display import display
def multiplot(a):
opts = df.columns.values
df.loc[:, a].plot()
interactive_plot = interactive(multiplot, a=['Variable X', 'Variable Y', 'Variable Z'])
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现使用multipleSelect小部件的最简单方法是使用装饰器interact。
%matplotlib inline
import numpy as np
import pandas as pd
from ipywidgets.widgets import interact, SelectMultiple
np.random.seed(123)
rows = 50
dfx = pd.DataFrame(np.random.randint(90,110,size=(rows, 1)), columns=['Variable X'])
dfy = pd.DataFrame(np.random.randint(25,68,size=(rows, 1)), columns=['Variable Y'])
dfz = pd.DataFrame(np.random.randint(60,70,size=(rows, 1)), columns=['Variable Z'])
df = pd.concat([dfx,dfy,dfz], axis = 1)
sel_mul = SelectMultiple(description="Variables",options=df.columns,value=['Variable X','Variable Z'],disabled=False)
@interact(variables=sel_mul)
def plot_multiple(variables):
df[list(variables)].plot()
Run Code Online (Sandbox Code Playgroud)
这就是结果。
| 归档时间: |
|
| 查看次数: |
4009 次 |
| 最近记录: |