指定要绘制在次要 y 轴上的一个系列

Specify one series to be plotted on the secondary y axis

假设我有一些长格式的数据。键 abc.

代表三个系列

c的值比ab高一个数量级。

在下图中,是否有一种(简单的)方法可以指定 c 应该绘制在次要 y 轴上?

import altair as alt
import numpy as np
import pandas as pd

df = (
    pd.DataFrame({
        'a': np.random.rand(10),
        'b': np.random.rand(10),
        'c': np.random.rand(10) * 10,
    })
    .stack()
    .to_frame('value')
    .reset_index()
)
df.columns = ['index', 'key', 'value']

(
    alt.Chart(df)
    .mark_line()
    .encode(x='index', y='value', color='key')
)

我不是专家,我相信还有更有效的方法。我使用过滤器对每个图形进行分层,并为 y 轴添加了独立设置。

import altair as alt
from altair import datum
import numpy as np
import pandas as pd

np.random.seed(20200113)
df = (
    pd.DataFrame({
        'a': np.random.rand(10),
        'b': np.random.rand(10),
        'c': np.random.rand(10) * 10,
    })
    .stack()
    .to_frame('value')
    .reset_index()
)
df.columns = ['index', 'key', 'value']

base = alt.Chart(df).mark_line().encode(
    x='index',
    y='value',
    color='key:N'
    ).transform_filter(
    (datum.key == 'a') | (datum.key =='b')
)

line = alt.Chart(df).mark_line(color='#57A44C').encode(
    x='index',
    y=alt.Y('value', axis=alt.Axis(title='value')),
    color='key'
).transform_filter(
    (datum.key == 'c')
)

alt.layer(base, line).resolve_scale(
    y = 'independent'
)