使用某些列对多面图层图表进行排序

时间:2020-04-15 09:32:07

标签: python altair

This答案显示了如何在高度上对分层图表进行分面。 在documentation中,facet()函数声明能够采用facet参数,该参数可以是stringalt.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 :(得分:0)

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