Reputation: 77
This answer shows how to facet layered charts in altiar.
In the documentation, the facet()
function states to be able to take a facet
parameter that can either be a string
or an alt.Facet
object.
I would like to produce a faceted layered chart, with sorted charts and with columns. My approach was this
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)
)
Unforunately, it raises this non imformative error
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
Without the columns=2
parameter, it works as expected, but has no columns.
Upvotes: 1
Views: 755
Reputation: 77
Moving the column=2
property out of the alt.Facet
object seems to do the job.
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
)
Upvotes: 1