Altair分层图表指定颜色不生效问题求助
解决Altair分层图表折线颜色被覆盖的问题
问题核心是图层合并后同字段的颜色比例尺被自动统一:你给折线图和柱状图都绑定了Category:N作为颜色编码字段,用alt.layer合并后,Altair会将相同字段的颜色规则合并,导致折线图的红色设置被柱状图的颜色比例尺覆盖。
最简单的解决方法
因为每个facet面板只对应单个Category(A或B),折线图不需要按Category区分颜色,直接给折线图指定固定颜色即可,无需绑定字段:
修改chart_1的颜色编码部分,把绑定字段的颜色设置替换为固定值:
# 原折线图颜色设置 # color = alt.Color('Category:N', scale=alt.Scale(domain=domain, range=range_)) # 修改为固定红色 color=alt.value('red')
修改后的完整代码:
import pandas as pd import numpy as np import altair as alt df = pd.DataFrame(np.array([["A", 2021, 0.9, 0.5], ["A", 2020, 0.8, 0.7], ["B", 2021, 0.6, 0.5], ["B", 2020, 0.8, 0.7]]), columns=['Category', 'Year', 'Count_%_All', 'Count_%_Industry']) chart_1 = alt.Chart(df).mark_line(point = True).encode( x=alt.X('Year:O', title=None ), y=alt.Y('Count_%_All:Q', title = "% Companies", axis=alt.Axis(format='%',grid = False) ), # 直接指定固定红色,不再绑定Category字段 color=alt.value('red') ) domain_1 =['A', 'B'] range_1 = ['green', 'blue'] chart = alt.Chart(df).mark_bar().encode( x=alt.X('Year:O', title=None ), y=alt.Y('Count_%_Industry:Q', title = "% Companies", axis=alt.Axis(format='%',grid = False) ), color = alt.Color('Category:N',scale=alt.Scale(domain=domain_1, range=range_1), legend = None), ) final = alt.layer(chart, chart_1, data=df).facet(column='Category:N') final
备选方案(保留字段绑定场景)
如果需要保留折线图的字段绑定逻辑,可以给折线图的颜色编码添加independent=True参数,让它的颜色比例尺独立于柱状图:
color = alt.Color('Category:N', scale=alt.Scale(domain=domain, range=range_), independent=True)
不过此场景下每个面板仅对应一个类别,固定颜色的方案更简洁高效。
内容的提问来源于stack exchange,提问作者Green Finance
相关产品推荐
相关产品推荐

