Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 牵牛星:用于分层绘图的两个独立滑块_Python_Pandas_Altair - Fatal编程技术网

Python 牵牛星:用于分层绘图的两个独立滑块

Python 牵牛星:用于分层绘图的两个独立滑块,python,pandas,altair,Python,Pandas,Altair,我有一个这样的数据帧(用于生成数据): 我想比较两行-l1和l2,它们都取决于参数t。每行有五个采样的t值,用t_i编号。我想绘制两条线,每一条线都突出显示一个采样点。要突出显示的点应使用两个滑块设置-每行一个 我可以让它在没有滑块的情况下工作: base=alt.Chart(df).encode(x='x',y='y',color='line\u name') 对于df.line_name.unique()中的line_name: line=base.transform\u过滤器(datum

我有一个这样的数据帧(用于生成数据):

我想比较两行-
l1
l2
,它们都取决于参数
t
。每行有五个采样的
t
值,用
t_i
编号。我想绘制两条线,每一条线都突出显示一个采样点。要突出显示的点应使用两个滑块设置-每行一个

我可以让它在没有滑块的情况下工作:

base=alt.Chart(df).encode(x='x',y='y',color='line\u name')
对于df.line_name.unique()中的line_name:
line=base.transform\u过滤器(datum.line\u name==line\u name)
绘图+=[line.mark\u line(),line.mark\u point().transform\u filter(datum.t\u i==int(line\u name[1])]
alt.layer(*图)
或使用1个滑块:

df.line\u name.unique()中的line\u name的
:
line=base.transform\u过滤器(datum.line\u name==line\u name)
slider=alt.binding_range(最小值=0,最大值=4,步长=1,name='t_i:')
选择_t_i=alt.selection_single(name=“t_i”,fields=['t_i'],bind=slider,init={'t_i':0})
绘图+=[line.mark_line(),
line.mark_point().添加_选择(选择__i).变换_过滤器(选择__i)]
alt.layer(*绘图[:-1])
我得到了预期的结果:

但如果我将最后一行更改为实际添加第二个滑块:

alt.layer(*绘图[:-1])->alt.layer(*绘图)
我什么也没得到-绘图没有显示,调用
display
也没有帮助。我应该怎么做呢

另外,我想查看所选点的
t
值,而不是
t\u I
。实际上,我添加了
t_I
,因为我无法用任意值定义滑块-我看到的所有示例都有
min、max、step
。如何显示
t
的值,以便使用滑块进行更新

谢谢

编辑(工作代码):

df.line\u name.unique()中的line\u name的
:
line=base.transform\u过滤器(datum.line\u name==line\u name)
slider=alt.binding\u范围(最小值=0,最大值=4,步长=1,name='t\u%s:'%line\u名称[1:])
选择_t_i=alt.selection_single(字段=['t_i'],绑定=滑块,初始={'t_i':0})
绘图+=[line.mark_line(),
line.mark_point().添加_选择(选择__i).变换_过滤器(选择__i)]
alt.layer(*绘图[:-1])

两个选项不能具有相同的名称。从您的选择定义中删除
name=“t_i”
(这样每个选择都会有一个唯一的自动生成的名称),它就会起作用。

非常感谢,杰克!你的建议奏效了,我也看了你的2018 PyCon教程,所以事情开始变得有意义了。但我仍然有一个问题:如果我让我的线图具有交互性,那么在每次移动时,选择都会重置,并且
line.mark\u point().add\u selection(select\t\u I).transform\u filter(select\t\u I)
中的所有点都会可见,而不仅仅是一个。有没有简单的解决方法?我通常会避免对添加到同一图表面板的选择进行过滤。