python - Altair:具有图例和自定义颜色的分层折线图

标签 python data-visualization altair vega-lite

我正在 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

这是可视化:

enter image description here

我想为此添加一个图例,幸运的是,有一个 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

这给了我一个带有图例的分层折线图,但我无法设置线条的颜色。所以它看起来有点像这样:

enter image description here

我如何更改它,以便在第一个示例中获得自定义线条颜色:

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/

相关文章:

python - 如何将菜单栏添加到 QWidget?

python - python中的饼图雷达图(披萨片)

javascript - Highcharts:x 轴上完全自定义的标签位置

altair - 如何根据 Altair 图表中的选择对值进行排序?

python - 是否可以创建一个函数,该函数返回创建时生成的静态值,而不是调用该函数时生成的静态值?

python - 在 pandas.to_numeric 中向下转换为 float16

python - Safari 中未设置 Flask session cookie

charts - 如何指定谷歌饼图的大小?

python - 堆积条形图。创建一个包含所有类别信息的集成工具提示 (Altair)

python - 如何获得用户权限?