You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit结合Altair的条形图中根据OVERDUE字段的布尔值设置不同条形颜色?

如何在Streamlit结合Altair的条形图中根据OVERDUE字段的布尔值设置不同条形颜色?

嗨,我懂你现在卡在哪啦!其实要实现根据OVERDUE的布尔值给条形设置不同颜色,只需要在Altair的encode方法里加上color编码就可以搞定,还能自定义你想要的绿红配色哦~

直接给你修改后的完整代码,关键改动我会标注说明:

import altair as alt
import streamlit as st
import pandas as pd

# 模拟你的数据框(实际使用时替换成你自己的df_to_display即可)
data = {
    "PRODUKT": ["C", "A", "X", "T", "S", "M", "V", "R"],
    "CURRENT_DELAY": [546, 76, 27, 21, 3, 3, 3, 3],
    "OVERDUE": [False, False, True, True, True, True, False, True]
}
df_to_display = pd.DataFrame(data)

st.altair_chart(
    alt.Chart(df_to_display)
    .mark_bar()
    .encode(
        x=alt.X("CURRENT_DELAY", axis=alt.Axis(title="Current Delay (days)")),
        y=alt.Y(
            "PRODUKT",
            axis=alt.Axis(title="Product"),
            sort=alt.EncodingSortField(field="CURRENT_DELAY", order="descending"),
        ),
        # 👇关键新增:根据OVERDUE字段设置条形颜色
        color=alt.Color(
            "OVERDUE:N",  # :N表示将布尔值当作名义类别处理,区分真假两个分组
            scale=alt.Scale(
                domain=[False, True],  # 对应OVERDUE的两个取值
                range=["#2ecc71", "#e74c3c"]  # 自定义颜色:绿色对应False,红色对应True
            ),
            legend=alt.Legend(title="Overdue Status")  # 自定义图例标题,让图表更清晰
        )
    ),
    use_container_width=True,
)

关键步骤说明:

  • 我们在encode中新增了color参数,绑定OVERDUE字段,用:N指定它是名义类型,这样Altair会把False和True看作两个独立的类别,分别分配颜色。
  • 通过alt.Scale实现颜色映射:domain列出字段的所有可能取值,range对应每个取值的颜色代码,你可以根据喜好替换成其他颜色(比如用green、red这样的颜色名称也可以)。
  • 如果不需要显示图例,只需要把legend=None加到alt.Color配置里就行,这样图表会更简洁。

这样修改后,你的条形图就会自动根据OVERDUE的真假值显示对应颜色啦,试试看吧!

备注:内容来源于stack exchange,提问作者brillenheini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:19:51