Сортировка диаграмм граненых слоев с определенным количеством столбцов - PullRequest
0 голосов
/ 15 апреля 2020

Этот ответ показывает, как огранить многослойные диаграммы в альтиаре. В документации функция facet() заявляет, что может принимать параметр facet, который может быть string или alt.Facet объектом.

Я бы хотел для получения многогранной многослойной диаграммы с отсортированными диаграммами и столбцами. Мой подход был такой

import altair as alt
from vega_datasets import data
cars = data.cars()

horse = alt.Chart().mark_point().encode(
    x='Weight_in_lbs',
    y='Horsepower'
)

miles = alt.Chart().mark_point(color='red').encode(
    x='Weight_in_lbs',
    y='Miles_per_Gallon'
)

alt.layer(horse, miles, data=cars).facet(
    # column='Origin'
    facet=alt.Facet('Origin', sort=['USA', 'Europe', 'Japan'], columns=2)
)

К сожалению, он вызывает эту неинформативную ошибку

Traceback (most recent call last):
  File ".\test.py", line 19, in <module>
    'test.html', webdriver='firefox', embed_options={'renderer': 'svg'})
  File "<conda-path>\lib\site-packages\altair\vegalite\v4\api.py", line 476, in save
    result = save(**kwds)
  File "<conda-path>\lib\site-packages\altair\utils\save.py", line 79, in save
    spec = chart.to_dict()
  File "<conda-path>\lib\site-packages\altair\vegalite\v4\api.py", line 382, in to_dict
    dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 328, in to_dict
    context=context,
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 62, in _todict
    for k, v in obj.items()
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 63, in <dictcomp>
    if v is not Undefined
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 56, in _todict
    return obj.to_dict(validate=validate, context=context)
  File "<conda-path>\lib\site-packages\altair\vegalite\v4\api.py", line 382, in to_dict
    dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 328, in to_dict
    context=context,
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 62, in _todict
    for k, v in obj.items()
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 63, in <dictcomp>
    if v is not Undefined
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 58, in _todict
    return [_todict(v, validate, context) for v in obj]
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 58, in <listcomp>
    return [_todict(v, validate, context) for v in obj]
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 56, in _todict
    return obj.to_dict(validate=validate, context=context)
  File "<conda-path>\lib\site-packages\altair\vegalite\v4\api.py", line 382, in to_dict
    dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
  File "<conda-path>\lib\site-packages\altair\utils\schemapi.py", line 339, in to_dict
    raise SchemaValidationError(self, err)
altair.utils.schemapi.SchemaValidationError: Invalid specification

        altair.vegalite.v4.api.Chart, validating 'required'

        'data' is a required property

Без параметра columns=2 он работает, как и ожидалось, но не имеет столбцов.

1 Ответ

0 голосов
/ 15 апреля 2020

Перемещение свойства column=2 из объекта alt.Facet, похоже, делает эту работу.

import altair as alt
from vega_datasets import data
cars = data.cars()

horse = alt.Chart().mark_point().encode(
    x='Weight_in_lbs',
    y='Horsepower'
)

miles = alt.Chart().mark_point(color='red').encode(
    x='Weight_in_lbs',
    y='Miles_per_Gallon'
)

alt.layer(horse, miles, data=cars).facet(
    # column='Origin'
    facet=alt.Facet('Origin', sort=['USA', 'Europe', 'Japan']),
    columns=2
)

Feceted LayerChart with sorted sub-charts in 2 columns

...