Python 在Altair中使用共享选择器/过滤器在不同图表中绘制两个数据帧
我有两个熊猫数据帧Python 在Altair中使用共享选择器/过滤器在不同图表中绘制两个数据帧,python,altair,Python,Altair,我有两个熊猫数据帧data和data\u queue,它们具有相同的结构,包含相似的数据。 前者应绘制为直线,而后者应绘制为散点图。 我需要一个共享选择器来过滤两个图表。 在下面的示例中,选择器仅在我删除散点时工作 如何在牵牛星上实现这一点 注意:我需要最后一个层将工具提示、规则、文本等添加到线条图中。为了便于阅读,我省略了这一部分 input_dropdown = alt.binding_select(options=data.koplus_name.unique().tolist()) se
data
和data\u queue
,它们具有相同的结构,包含相似的数据。
前者应绘制为直线,而后者应绘制为散点图。
我需要一个共享选择器来过滤两个图表。
在下面的示例中,选择器仅在我删除散点
时工作
如何在牵牛星上实现这一点
注意:我需要最后一个层
将工具提示、规则、文本等添加到线条图中。为了便于阅读,我省略了这一部分
input_dropdown = alt.binding_select(options=data.koplus_name.unique().tolist())
selection = alt.selection_single(fields=['koplus_name'], bind=input_dropdown, name='Koplus', init={'koplus_name': input_dropdown.options[0]})
line = alt.Chart(data).mark_line().encode(
x=alt.X('yearmonthdatehoursminutes(timestamp)', title='timestamp', scale=alt.Scale(domain=(str(data.timestamp.min()), str(data.timestamp.min() + pd.Timedelta(value=1, unit='D'))))),
y=alt.Y('value', axis=alt.Axis(title=''), scale=alt.Scale(domain=(0, data.value.max()))),
color=alt.Color('variable', legend=alt.Legend(title=None)),
)
scatter = alt.Chart(data_queue).mark_point().encode(
x='green time',
y='value',
)
chart = line + scatter
layer = alt.layer(
chart
).add_selection(
selection
).transform_filter(
selection
).properties(
width=800, height=250
).interactive(bind_y=False)
如果希望数据响应相同的选择,则必须是同一数据源的一部分。您可以在创建图表之前加入pandas中的数据集,也可以在Altair语法中加入具有 下面是第二种方法的示例,其中包含一些小数据集:
import numpy as np
import pandas as pd
import altair as alt
df1 = pd.DataFrame({
'x': np.arange(100),
'y': np.random.randn(100).cumsum()
})
df2 = pd.DataFrame({
'x': np.arange(100),
'z': np.random.randn(100).cumsum()
})
selection = alt.selection_interval(encodings=['x'])
base = alt.Chart(df1).transform_lookup(
lookup='x',
from_=alt.LookupData(data=df2, key='x', fields=['z'])
).mark_point(color='steelblue').encode(
x='x:Q',
color=alt.condition(selection, alt.value('steelblue'), alt.value('lightgray'))
)
alt.layer(
base.encode(y='y:Q'),
base.encode(y='z:Q')
).add_selection(
selection
)
谢谢杰克,这有效地解决了这个问题。我希望有类似于matplotlib的东西,通过共享axis对象,我可以在两个步骤中打印两个DFs。我有两个时间序列,合并是在没有明确原因的情况下创建NAN的,因此通过共享
ax
绘图将是一种快速(呃)可视化数据的方法。