Altair Hconcat - Можно ли настроить разные оси для графиков в одном 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)

Выход

Я хотел бы, чтобы ось Y на одной диаграмме была слева, а ось Y для другой диаграммы - справа, но я не нашел решения. Конфигурация может происходить на уровне диаграммы:

chart_2 = (alt.Chart(df2).mark_bar().encode(x='metric', y='value')).configure_axisY(orient='right')

но тогда возникает исключение при представлении с использованием hconcat func:

ValueError: Objects with "config" attribute cannot be used within HConcatChart. Consider defining the config attribute in the HConcatChart object instead.

Есть какой-либо способ сделать это?

заранее спасибо

1 ответ

Решение

В 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)

Другие вопросы по тегам