gpt4 book ai didi

python - Altair:如何根据最大值在面网格中对线条进行不同的样式设计?

转载 作者:行者123 更新时间:2023-12-01 00:06:16 27 4
gpt4 key购买 nike

我正在尝试创建一个方面图来比较 sleep 剥夺研究中受试者的 react 时间。数据来自 sleepstudy 数据集,可在 pydataset 包中获取。

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

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

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

facet grid from a dataset about a sleep deprivation study

最佳答案

您可以使用joinaggregate transform来做到这一点计算每个 Pane 内的最大值,然后根据该最大值着色:

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
)

enter image description here

关于python - Altair:如何根据最大值在面网格中对线条进行不同的样式设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com