指定要绘制在次要 y 轴上的一个系列
Specify one series to be plotted on the secondary y axis
假设我有一些长格式的数据。键 a
、b
和 c
.
代表三个系列
c
的值比a
和b
高一个数量级。
在下图中,是否有一种(简单的)方法可以指定 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'
)
假设我有一些长格式的数据。键 a
、b
和 c
.
c
的值比a
和b
高一个数量级。
在下图中,是否有一种(简单的)方法可以指定 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'
)