Closed
Description
I'm trying out altair's support for the new __dataframe__
protocol, and am running into a few issues.
Given the following pyarrow & altair code (taken and modified from the getting started guide):
import altair as alt
import pyarrow as pa
data = pa.Table.from_pydict(
{'x': ['A', 'B', 'C', 'D', 'E'],
'y': [5, 3, 6, 7, 2]}
)
chart = alt.Chart(data).mark_bar().encode(
x='x',
y='y',
)
chart.save("out.html")
This outputs:
Traceback (most recent call last):
File "/home/jcristharif/Code/altair/test.py", line 13, in <module>
chart.save("out.html")
File "/home/jcristharif/Code/altair/altair/vegalite/v5/api.py", line 1066, in save
result = save(**kwds)
^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/save.py", line 189, in save
perform_save()
File "/home/jcristharif/Code/altair/altair/utils/save.py", line 127, in perform_save
spec = chart.to_dict(context={"pre_transform": False})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/vegalite/v5/api.py", line 2677, in to_dict
return super().to_dict(
^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/vegalite/v5/api.py", line 903, in to_dict
vegalite_spec = super(TopLevelMixin, copy).to_dict( # type: ignore[misc]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 807, in to_dict
result = _todict(
^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 340, in _todict
return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 340, in <dictcomp>
return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 336, in _todict
return obj.to_dict(validate=False, context=context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 807, in to_dict
result = _todict(
^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 340, in _todict
return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 340, in <dictcomp>
return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/utils/schemapi.py", line 336, in _todict
return obj.to_dict(validate=False, context=context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jcristharif/Code/altair/altair/vegalite/v5/schema/channels.py", line 51, in to_dict
raise ValueError("{} encoding field is specified without a type; "
ValueError: x encoding field is specified without a type; the type cannot be automatically inferred because the data is not specified as a pandas.DataFrame.
Versions:
- python 3.11
- altair dev branch
- pyarrow 12.0.1