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)
中的所有点都会可见,而不仅仅是一个。有没有简单的解决方法?我通常会避免对添加到同一图表面板的选择进行过滤。