Altair Hconcat - Можно ли настроить разные оси для диаграмм в одном и том же HConCat? - PullRequest
1 голос
/ 22 марта 2020

Я использую 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 fun c:

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

Есть ли что-либо сделать это?

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

1 Ответ

2 голосов
/ 22 марта 2020

Свойство 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)

enter image description here

...