Altair Hconcat - 是否可以在同一个 HConCat 中为图表配置不同的轴?
Altair Hconcat - It it possible to configure different axes for charts in same HConCat?
我正在使用 streamlit
构建仪表板,我想一个接一个地显示 2 个图表,使用 altair
效果很好,hconcat
函数允许我做到这一点。
import altair as alt
df1 = pd.DataFrame({'metric':list('ab'),
'value':[8,10]})
df2 = pd.DataFrame({'metric':list('xyz'),
'value':[5,9,7]})
chart_1 = (alt.Chart(df1).mark_bar().encode(x='metric', y='value'))
chart_2 = (alt.Chart(df2).mark_bar().encode(x='metric', y='value'))
(chart_1 | chart_2)
Output
我希望一个图表的 Y 轴在左侧,另一个图表的 Y 轴在右侧,但还没有找到解决方案。配置可以发生在图表级别:
chart_2 = (alt.Chart(df2).mark_bar().encode(x='metric', y='value')).configure_axisY(orient='right')
但随后在使用 hconcat
函数呈现时抛出异常:
ValueError: Objects with "config" attribute cannot be used within HConcatChart. Consider defining the config attribute in the HConcatChart object instead.
有办法吗?
提前致谢
config
属性 只能在图表的顶层定义,因为它本质上充当适用于最终图表所有组件的主题。
如果你想为每个子图设置不同的轴属性,全局配置不是这样做的地方;您可以在每个子图的轴属性中执行此操作。例如:
chart_1 = alt.Chart(df1).mark_bar().encode(
x='metric',
y=alt.Y('value', axis=alt.Axis(orient='left'))
)
chart_2 = alt.Chart(df2).mark_bar().encode(
x='metric',
y=alt.Y('value', axis=alt.Axis(orient='right'))
)
(chart_1 | chart_2)
我正在使用 streamlit
构建仪表板,我想一个接一个地显示 2 个图表,使用 altair
效果很好,hconcat
函数允许我做到这一点。
import altair as alt
df1 = pd.DataFrame({'metric':list('ab'),
'value':[8,10]})
df2 = pd.DataFrame({'metric':list('xyz'),
'value':[5,9,7]})
chart_1 = (alt.Chart(df1).mark_bar().encode(x='metric', y='value'))
chart_2 = (alt.Chart(df2).mark_bar().encode(x='metric', y='value'))
(chart_1 | chart_2)
Output
我希望一个图表的 Y 轴在左侧,另一个图表的 Y 轴在右侧,但还没有找到解决方案。配置可以发生在图表级别:
chart_2 = (alt.Chart(df2).mark_bar().encode(x='metric', y='value')).configure_axisY(orient='right')
但随后在使用 hconcat
函数呈现时抛出异常:
ValueError: Objects with "config" attribute cannot be used within HConcatChart. Consider defining the config attribute in the HConcatChart object instead.
有办法吗?
提前致谢
config
属性 只能在图表的顶层定义,因为它本质上充当适用于最终图表所有组件的主题。
如果你想为每个子图设置不同的轴属性,全局配置不是这样做的地方;您可以在每个子图的轴属性中执行此操作。例如:
chart_1 = alt.Chart(df1).mark_bar().encode(
x='metric',
y=alt.Y('value', axis=alt.Axis(orient='left'))
)
chart_2 = alt.Chart(df2).mark_bar().encode(
x='metric',
y=alt.Y('value', axis=alt.Axis(orient='right'))
)
(chart_1 | chart_2)