Altair:带有图例和自定义颜色的分层折线图
Altair: Layered Line Chart with Legend and Custom Colors
我正在 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
这是可视化:
我想为此添加一个图例,幸运的是,之前有一个 。
但是,我想不通的是如何使用图例,同时还保留自定义颜色。我只能做一个或另一个。有没有办法做到这两点?例如,如果我遵循上面链接的答案中的代码,我的代码如下所示:
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)
)
我正在 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
这是可视化:
我想为此添加一个图例,幸运的是,之前有一个
但是,我想不通的是如何使用图例,同时还保留自定义颜色。我只能做一个或另一个。有没有办法做到这两点?例如,如果我遵循上面链接的答案中的代码,我的代码如下所示:
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)
)