Altair分层图表(柱状图+规则线)无法修改线条颜色求助
Altair分层图表(柱状图+规则线)无法修改线条颜色求助
嘿,我看了你的代码,问题很明确——你只给规则线设置了虚线样式(strokeDash),但完全没指定颜色编码呀!所以线条只会用默认颜色,自然看不到不同DESCR对应的颜色差异~
要解决这个问题,只需要在limits图表的encode里加上color编码,和strokeDash一样绑定DESCR字段就行。这样每个DESCR(也就是C和D)对应的规则线就会拥有独特的颜色,还能和柱状图的图例对应上。
修改后的代码如下:
import altair as alt import pandas as pd data = { 'Date': ['2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02', '2023-01-01', '2023-01-02'], 'Value': [50, 200, 300, 150, 250, 350, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300], 'DESCR': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D'], 'Company': ['X', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y'], } source = pd.DataFrame(data) source_aux = source[(source['DESCR']=='C') | (source['DESCR']=='D')] source = source[(source['DESCR']=='A') | (source['DESCR']=='B')] bars = alt.Chart().mark_bar().encode( x='Date:N', y='Value:Q', color=alt.Color('DESCR:N', legend=alt.Legend(title=None)) ) # 这里新增了color编码,和strokeDash绑定同一个字段 limits = alt.Chart(source_aux).mark_rule().encode( y='Value', strokeDash=alt.StrokeDash('DESCR:N', legend=alt.Legend(title=None)), color=alt.Color('DESCR:N', legend=alt.Legend(title=None)) ) chart = alt.layer( bars, limits, data=source ).facet( column='Company:N' ) chart
如果你想自定义每个DESCR的颜色(比如让C、D的颜色和A、B区分开,避免自动分配的颜色重复),还可以给color设置自定义的颜色映射:
color=alt.Color('DESCR:N', scale=alt.Scale( domain=['A', 'B', 'C', 'D'], range=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728'] # 自定义颜色值 ), legend=alt.Legend(title=None))
这样调整后,你的规则线就能同时拥有不同的颜色和虚线样式,完美匹配你的需求啦~
备注:内容来源于stack exchange,提问作者catun
相关产品推荐
相关产品推荐

