我正在 Altair 中创建一个包含 2 条线的分层折线图,每条线都有自定义颜色。我想为此添加一个传说。我的原始代码(没有图例)如下所示:
source = df
line1 = alt.Chart(source).mark_line().encode(
x='Date:T',
y='FeatureOne:Q',
color= alt.value('gold')
)
line2 = alt.Chart(source).mark_line().encode(
x='Date:T',
y=alt.Y('FeatureTwo:Q', title='Value'),
color= alt.value('red')
)
line1 + line2
这是可视化:
我想为此添加一个图例,幸运的是,有一个 good answer on this以前。
但是,我不知道如何使用图例,同时保留自定义颜色。我只能做其中之一。有没有办法两全其美?例如,如果我按照上面链接的答案中的代码进行操作,我的代码将如下所示:
source = df
line1 = alt.Chart(source).mark_line().transform_fold(
fold=['FeatureOne'],
as_=['variable', 'value']
).encode(
x='Date:T',
y='FeatureOne:Q',
# color= alt.value('gold')
color='variable:N'
)
line2 = alt.Chart(source).mark_line().transform_fold(
fold=['FeatureTwo'],
as_=['variable', 'value']
).encode(
x='Date:T',
y=alt.Y('FeatureTwo:Q', title='Value'),
# color= alt.value('red')
color='variable:N'
)
line1 + line2
这给了我一个带有图例的分层折线图,但我无法设置线条的颜色。所以它看起来有点像这样:
我如何更改它,以便在第一个示例中获得自定义线条颜色:
color= alt.value('red')
同时也做图例:
color='variable:N'
有没有什么好办法可以同时做到这两点?
最佳答案
您可以像这样定义自定义色标:
scale = alt.Scale(domain=['FeatureOne', 'FeatureTwo'], range=['gold', 'red'])
然后将此比例传递给图表中的一种或两种颜色编码:
color=alt.Color('variable:N', scale=scale)
但请注意,如果您已经使用折叠变换,则没有理由手动进行分层;这应该可以同时绘制两条线:
alt.Chart(source).mark_line().transform_fold(
fold=['FeatureOne', 'FeatureTwo'],
as_=['variable', 'value']
).encode(
x='Date:T',
y='value:Q',
color=alt.Color('variable:N', scale=scale)
)
关于python - Altair:具有图例和自定义颜色的分层折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65226756/