我发现使用
alt.LookupData
查找数据时,返回的是最后一个数据。在下面的示例中,当我在 lookup_data 中查找 field 参数以用于确定圆圈的颜色时,它会返回数据的后半部分 [0] * 5 + [1] * 5
(其中 selection_param==1
)。
如何设置条件,以便在 selection_param 为 0 (selection_param==0
) 时使用
field中的值?
import altair as alt
import numpy as np
import pandas as pd
# Generate data primary data
np.random.seed(42)
primary_data = pd.DataFrame({
'key': np.arange(10),
'x': np.random.normal(0, 1, 10),
'y': np.random.normal(0, 1, 10),
})
# Generate lookup data
lookup_data = pd.DataFrame({
'key': list(np.arange(10)) * 2,
'selection_param': [0] * 10 + [1] * 10,
'field': [0, 1, 2, 3, 4] * 2 + [0] * 5 + [1] * 5,
})
# Create chart
alt.Chart(primary_data).mark_circle().encode(
x='x',
y='y',
color='field:N'
).transform_lookup(
'key',
from_=alt.LookupData(
lookup_data,
key='key',
fields=['field']
)
)
要在 Selection_param == 0 时根据 Selection_param 列有条件地设置颜色,您需要修改查找转换的操作方式,以确保仅将所需的数据子集用于查找。
Altair的transform_lookup方法本身不直接支持条件。但是,您可以在查找中使用lookup_data 之前对其进行过滤。以下是如何修改代码以仅使用lookup_data中的值,其中selection_param == 0:
filtered_lookup_data = lookup_data[lookup_data['selection_param'] == 0]
chart = alt.Chart(primary_data).mark_circle().encode(
x='x',
y='y',
color='field:N').transform_lookup(
'key',
from_=alt.LookupData(
filtered_lookup_data,
key='key',
fields=['field']))