Python Altair:如何根据线的最大值在镶嵌面网格中设置不同的线样式?

Python Altair:如何根据线的最大值在镶嵌面网格中设置不同的线样式?,python,data-visualization,facet,altair,Python,Data Visualization,Facet,Altair,我试图创建一个刻面图来比较睡眠剥夺研究中受试者的反应时间。数据来自sleepstudy数据集,可在pydataset软件包中获得 通过使用altair.condition,我能够以不同的方式设计线条。问题是我没有得到我想要的结果。我的目标是用橙色突出显示至少一次超过400(ms)的线条,即下图中的308、332和337 我在下面代码中使用的alt.condition似乎只测试df.Reaction系列的第一个数据 我正在使用altair4.0.1 将altair导入为alt 从pydataset

我试图创建一个刻面图来比较睡眠剥夺研究中受试者的反应时间。数据来自
sleepstudy
数据集,可在
pydataset
软件包中获得

通过使用altair.condition,我能够以不同的方式设计线条。问题是我没有得到我想要的结果。我的目标是用橙色突出显示至少一次超过400(ms)的线条,即下图中的308、332和337

我在下面代码中使用的
alt.condition
似乎只测试
df.Reaction
系列的第一个数据

我正在使用altair
4.0.1

将altair导入为alt
从pydataset导入数据
df=数据(“睡眠研究”)
alt.Chart(df).标记线().编码(
x=alt.x('Days:O',title=''),
y=alt.y('Reaction:Q',title='',scale=alt.scale(domain=(200450)),
#如何测试条件:在研究过程中,最大(反应)>400ms是否至少测试一次?
颜色=alt.condition(
alt.datum['Reaction']>300,
alt.value(“橙色”),
alt.value('darkgray')
),
facet=alt.facet('Subject:O',columns=3,title=''),
).物业(
title='10天以上睡眠剥夺受试者的反应时间(ms)',
宽度=200,
高度=100
)

您可以通过使用计算每个窗格中的最大值,然后根据该最大值进行着色来完成此操作:

import altair as alt
from pydataset import data

df = data('sleepstudy')

alt.Chart(df).transform_joinaggregate(
    maxReaction='max(Reaction)',
    groupby=['Subject']
).mark_line().encode(
    x=alt.X('Days:O', title=''),
    y=alt.Y('Reaction:Q', title='', scale=alt.Scale(domain=(200, 450))),
    # How do I test for the condition: is max(reaction) > 400 ms at least once during the study?
    color=alt.condition(
        alt.datum['maxReaction'] > 400,
        alt.value('orange'),
        alt.value('darkgray')
    ),
    facet=alt.Facet('Subject:O', columns=3, title=''),
).properties(
    title='Reaction times (ms) for sleep-deprived subjects over 10 days',
    width=200,
    height=100
)