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

Altair绘制mark_area图表出现褪色现象该如何解决?

问题描述与解决

问题更新说明

将alt.X('yearmonthdate(TimeUTC):T'修改为alt.X('yearmonthdate(TimeUTC):O'即可解决该问题,详细内容见下文。

现有数据格式

现有四年的结构化数据,格式样例如下:

TimeUTCFlightIDDroneType
2018-08-22 19:35:23.024386+00:002018-08-22 19:35:23+00:00663f-46fe-8887-d37895745506MavicPro
2018-08-22 19:35:35.888933+00:002018-08-22 19:35:35+00:00663f-46fe-8887-d37895745506MavicPro
2018-08-22 20:05:06.239102+00:002018-08-22 20:05:06+00:00a63a-4e01-b2d2-bdecc9027049MavicPro

目前索引列与TimeUTC列均保留微秒是有合理设计原因的,相关内容后续另行讨论。

可视化异常现象

按年度维度对该数据进行可视化绘制时,使用mark_bar生成的图表均符合预期,但4张mark_area类型图表中,有2张褪色严重,1张存在轻微褪色情况:

  • 正常显示的图表:正常显示的图表
  • 严重褪色的图表:严重褪色的图表
  • 轻微褪色的图表:轻微褪色的图表

原始绘图代码

chart = alt.Chart(chart_df).mark_area().encode(
    alt.X('month(TimeUTC):O', title='Month',axis=alt.AxisConfig(labelAngle=45)), 
    alt.Y('distinct(FlightID)', type='quantitative', title='Number of sUAS Operations'),
    alt.Color('DroneType', 
        type='nominal', 
        legend=alt.Legend(orient="bottom", columns=4), 
    scale=alt.Scale(domain=_domain, range=_range_))
).properties(
        title='Distribution of sUAS Flights by Model Over Time (Fig. 11)',
        width=400,
        height=200
    )
chart.configure_title(
    fontSize=20,
    font='Courier',
    anchor='start',
    color='gray'
)

所有图表均使用同一个绘图函数、来源于同一个DataFrame的数据集。

问题原因与修复方案

异常原因

使用时间类型(:T后缀)作为X轴编码时,Altair/Vega-Lite会将X轴识别为连续的时间维度,当数据中存在大量离散的时间点但没有连续覆盖全部时间区间时,面积图的填充区域会出现重叠、半透明叠加的效果,看起来就像褪色,数据分布越稀疏,重叠越少,褪色就越严重,这和mark_bar使用离散高度块、不会出现叠加半透的渲染逻辑不同。

修复方案

将X轴的编码类型从连续时间类型:T修改为有序分类类型:O,也就是把alt.X('yearmonthdate(TimeUTC):T'替换为alt.X('yearmonthdate(TimeUTC):O'即可。
修改前后的效果对比:

  • 修改前(使用:T参数):使用:T参数生成的图表
  • 修改后(使用:O参数):使用:O参数生成的图表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:04