Altair直方图,是否可以给mark_rule命名?

时间:2019-10-09 20:00:57

标签: python plot altair

我有一个数据框,并绘制以下图。

enter image description here

代码是这样的:

import altair as alt
alt.renderers.enable('default')

base = alt.Chart(df_800).properties()

bar = base.mark_bar().encode(
    x=alt.X('volumechange', bin=True, title='Volume Change'),
    y='count()'
)

rule = base.mark_rule(color='red').encode(
    x='mean(volumechange)',
    size=alt.value(5)
)

rule2 = base.mark_rule(color='orange').encode(
    x='median(volumechange)',
    size=alt.value(5),
)

bar + rule + rule2

我想添加一个图例或类似内容,以表明红色规则是音量变化的平均值,橙色是中位数。这是我第一次使用altair,不胜感激。

1 个答案:

答案 0 :(得分:2)

Altair中的图例是从颜色编码自动生成的,因此诀窍是使聚合成为一种格式,其中它们的标签是按颜色编码的列。这是您可以做到的一种方法:

import pandas as pd
import numpy as np
df_800 = pd.DataFrame({'volumechange': np.random.randn(100)})

base = alt.Chart(df_800)

bar = base.mark_bar(color='lightgray').encode(
    x=alt.X('volumechange', bin=True, title='Volume Change'),
    y='count()'
)

aggregates = base.transform_aggregate(
    mean='mean(volumechange)',
    median='median(volumechange)',
).transform_fold(
    ['mean', 'median']
).mark_rule().encode(
    x='value:Q',
    color='key:N'
)

bar + aggregates

enter image description here