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

Altair调用transform_density绘制密度图显示空白如何解决

代码问题排查

你的代码生成空白图表、无法匹配目标效果的核心原因有3个:

  • color参数传参位置错误:你在mark_area(color='survived')中直接传入字段名survived,这里的color参数仅支持固定颜色值(如十六进制色值、标准颜色英文名),不存在名为survived的合法颜色,Altair无法解析就会出现渲染空白。
  • 密度计算未做分组:目标图表是按survived(是否幸存)字段拆分两组,分别绘制年龄分布密度,你调用transform_density时没有指定分组规则,默认会将全量数据的年龄混合计算单条密度曲线,和目标逻辑完全不符。
  • 缺少重叠区域的视觉配置:两组密度图存在大面积重叠,如果不给面积图形加透明度,上层图形会完全遮挡下层内容,无法达到参考效果。
修复后完整代码
import altair as alt
import pandas as pd

# 加载数据集
data = pd.read_csv("machine_learning.csv")

alt.Chart(data).transform_density(
    'age',
    as_=['age', 'density'],
    groupby=['survived']  # 按是否幸存分组计算密度
).mark_area(
    opacity=0.5  # 添加透明度避免重叠遮挡
).encode(
    x="age:Q",
    y="density:Q",
    color="survived:N"  # 颜色映射放入encode通道,按survived字段区分分组
)
关键修改点说明
  • 将颜色映射逻辑从mark_area()移到encode()中,明确survived为分类字段,Altair会自动为不同分组分配区分色。
  • 在transform_density中新增groupby=['survived']参数,分别计算两类人群的年龄密度,匹配目标图表的分组逻辑。
  • 给面积标记添加opacity=0.5的透明度配置,让重叠区域可见,还原分层密度图的视觉效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:09:46