Как я могу расположить две многогранные горизонтальные диаграммы в Альтаире горизонтально? - PullRequest
1 голос
/ 30 октября 2019

Альтаир предлагает прекрасную функцию для фасетных диаграмм, используя фасетный метод. Например, следующий набор данных хорошо визуализируется:

print(df[['Year', 'Profile', 'Saison', 'Pos']].to_csv())
,Year,Profile,Saison,Pos
0,2017,6.0,Sommer,VL
1,2017,6.0,Winter,VL
13,2017,6.0,Winter,HL
12,2017,6.0,Sommer,HL
18,2017,6.0,Sommer,HR
6,2017,6.0,Sommer,VR
7,2017,6.0,Winter,VR
19,2017,6.0,Winter,HR
14,2018,5.5,Winter,HL
8,2018,5.5,Winter,VR
15,2018,5.5,Sommer,HL
20,2018,4.3,Winter,HR
21,2018,5.0,Sommer,HR
3,2018,5.5,Sommer,VL
2,2018,6.2,Winter,VL
9,2018,4.5,Sommer,VR
17,2019,4.5,Sommer,HL
11,2019,4.2,Sommer,VR
22,2019,3.5,Winter,HR
10,2019,5.28,Winter,VR
5,2019,4.6,Sommer,VL
4,2019,4.9,Winter,VL
16,2019,4.0,Winter,HL
23,2019,4.5,Sommer,HR

с помощью следующей команды:

alt.Chart(df).mark_bar().encode(x='Year:O', y='Profile:Q').facet(row='Saison:N', column='Pos:N')

enter image description here

Но, как выможет показаться, что у меня все еще много места по горизонтали, и я хотел бы использовать его, переставив Зима участок прямо рядом с Лето участок:

enter image description here

Я понимаю, что я уже использовал сетку столбцов для огранки атрибута Pos, но визуально для меня Зима и Соммер графики - это два отдельных графика(точно так же как здесь ), который я хотел бы разместить рядом. Я пытался создать две разные диаграммы в одной и той же ячейке и с помощью html генерировать их бок о бок, но в среде Jupyter есть ограничение только на один график Altair / Vega на ячейку.

Есть ли какой-нибудь способ, который я могуиспользовать, чтобы расположить эти диаграммы горизонтально?

1 Ответ

1 голос
/ 31 октября 2019

В Альтаире нет хорошего способа сделать это, потому что граненые диаграммы не могут быть вложены в соответствии со схемой Vega-Lite. Тем не менее, рендерер Vega-Lite действительно обрабатывает это в некоторых случаях, несмотря на то, что это технически запрещено схемой.

Так что вы можете взломать его, выполнив что-то вроде этого:

chart = alt.Chart(df).mark_bar().encode(
    x='Year:O',
    y='Profile:Q'
).facet('Saison:N')

spec = alt.FacetChart(
    data=df,
    spec=chart,
    facet=alt.Facet('Pos:N')
).to_json(validate=False)

print(spec)

Результирующая спецификация может быть вставлена ​​вручную в http://vega.github.io/editor, чтобы показать это ( ссылка редактора Vega ):

enter image description here

Вы даже заметите, что редактор Vega помечает части спецификации как недействительные. По общему признанию, это не самый удовлетворительный ответ, но он вроде работает.

Надеемся, что в будущем схема Vega-Lite добавит фактическую поддержку вложенных фасетов, поэтому их можно будет использовать более непосредственно из Altair.

...