Altair:如何根据其最大值在小平面网格中为线条设置不同的样式?

我正在尝试创建一个方面的图,以比较睡眠剥夺研究中受试者的反应时间。数据来自sleepstudy数据包中的pydataset数据集。

使用altair.condition可以对线条进行不同的样式设置。问题是我没有得到想要获得的结果。我打算用橙色至少突出显示至少一次超过400(ms)的行,即下表中的主题308、332和337。

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

我正在使用Altair 4.0.1

import altair as alt
from pydataset import data

df = data('sleepstudy')

alt.Chart(df).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['Reaction'] > 300,alt.value('orange'),alt.value('darkgray')
    ),facet=alt.Facet('Subject:O',columns=3,).properties(
    title='Reaction times (ms) for sleep-deprived subjects over 10 days',width=200,height=100
)

Altair:如何根据其最大值在小平面网格中为线条设置不同的样式?

yjr1119 回答:Altair:如何根据其最大值在小平面网格中为线条设置不同的样式?

您可以使用joinaggregate transform计算每个窗格中的最大值,然后根据该最大值进行着色:

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,).properties(
    title='Reaction times (ms) for sleep-deprived subjects over 10 days',width=200,height=100
)

enter image description here

本文链接:https://www.f2er.com/2695805.html

大家都在问