Altair绘制mark_area图表出现褪色现象该如何解决?
问题描述与解决
问题更新说明
将alt.X('yearmonthdate(TimeUTC):T'修改为alt.X('yearmonthdate(TimeUTC):O'即可解决该问题,详细内容见下文。
现有数据格式
现有四年的结构化数据,格式样例如下:
| TimeUTC | FlightID | DroneType | |
|---|---|---|---|
| 2018-08-22 19:35:23.024386+00:00 | 2018-08-22 19:35:23+00:00 | 663f-46fe-8887-d37895745506 | MavicPro |
| 2018-08-22 19:35:35.888933+00:00 | 2018-08-22 19:35:35+00:00 | 663f-46fe-8887-d37895745506 | MavicPro |
| 2018-08-22 20:05:06.239102+00:00 | 2018-08-22 20:05:06+00:00 | a63a-4e01-b2d2-bdecc9027049 | MavicPro |
目前索引列与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参数):
- 修改后(使用
:O参数):
内容的提问来源于stack exchange,提问作者DKovar
相关产品推荐
相关产品推荐

