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

如何用Altair将条形图替换为星级符号展示评分数据?

用Altair实现星级评分展示(替代条形图)

不需要使用复杂的同构图标示例,只需对数据做简单展开,再用星形点图即可实现需求,步骤如下:

1. 数据预处理

首先将评分值展开为对应数量的行,每行对应一个星星的位置:

import pandas as pd
import altair as alt

# 展开数据:把每个评分值拆成对应条数的记录,每条记录对应一个星星的位置
expanded_df = df.assign(
    star_pos=lambda d: d['value'].apply(lambda x: list(range(1, x+1)))
).explode('star_pos')

2. 修改Altair绘图代码

将原条形图替换为星形点图,核心改动是替换标记类型、调整y轴编码:

chart = (
    alt.Chart(expanded_df)
    .mark_point(shape='star', size=20)  # 使用星形标记,可调整size控制星星大小
    .encode(
        x=alt.X(
            "fund:O",
            axis=alt.Axis(title=None, labels=False, ticks=False, labelOverlap="greedy"),
        ),
        y=alt.Y("star_pos:Q", axis=alt.Axis(title="Value", grid=True, tickMinStep=1)),
        color=alt.Color(
            "fund:N",
            legend=alt.Legend(orient="top", labelLimit=700, direction="vertical"),
        ),
        tooltip=["fund:N", "value", "bucket", "as of"],
        column=alt.Column(
            "bucket:N",
            header=alt.Header(title=None, labelOrient="bottom", labelAngle=x_angle),
            spacing=50,
        ),
    )
    .configure_view(stroke="transparent")
    .interactive()
)

关键改动说明

  • 数据展开:通过assign生成包含1到评分值的列表,再用explode拆分,让每个星星对应一条数据
  • 标记替换:用mark_point(shape='star')替代mark_bar,直接使用内置星形形状,无需额外图标资源
  • y轴调整:将原value:Q改为展开后的star_pos:Q,让每个星星落在对应高度的位置,组成对应数量的星级
  • 保留原有配置:颜色、tooltip、列布局等配置与原代码一致,保证视觉风格统一

内容的提问来源于stack exchange,提问作者FFLS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:45