Python 3.x 牵牛星

Python 3.x 牵牛星,python-3.x,altair,vaex,Python 3.x,Altair,Vaex,我试图与一起使用,但我在将Vaex数据帧传递到Altair时遇到了一些问题 当试图做一个简单的 我这样说是错误的 指定的编码字段没有类型;无法自动推断类型,因为未将数据指定为pandas.DataFrame 但如果我试图指定它们 alt.Chart(df)\ .mark_line()\ .encode(alt.X('x:T'), alt.Y('y1:Q')) 我这样说是错误的 altair.vegalite.v4.api.Chart->0,验证“additionalProperties” 不允

我试图与一起使用,但我在将Vaex数据帧传递到Altair时遇到了一些问题

当试图做一个简单的

我这样说是错误的

指定的编码字段没有类型;无法自动推断类型,因为未将数据指定为pandas.DataFrame

但如果我试图指定它们

alt.Chart(df)\
.mark_line()\
.encode(alt.X('x:T'), alt.Y('y1:Q'))
我这样说是错误的

altair.vegalite.v4.api.Chart->0,验证“additionalProperties”

不允许使用其他属性(“y1”、“x”、“y2”是意外的)

在我看来,将Vaex数据帧链接到Altair似乎存在一些问题,但我不知道如何绕过它

以下是完整的代码:

import altair as alt
import numpy as np
import vaex
import datetime

base = datetime.datetime.today()
dates = [base - datetime.timedelta(days=x) for x in range(10)]

y1 = np.sin(range(10))
y2 = np.cos(range(10))

df = vaex.from_arrays(x=dates, y1=y1, y2=y2)

alt.Chart(df)\
.mark_line()\
.encode(alt.X('x:T'), alt.Y('y1:Q')) #.encode(alt.X('x'), alt.Y('y1'))

牵牛星与Vaex不兼容。最简单的方法是在牛郎星图表中使用Vaex数据框时,将其转换为熊猫;例如:

alt.Chart(df.to_pandas_df())
使用这种转换没有什么坏处:pandas是Altair的一个硬要求,Altair总是将数据序列化为JSON,以便将其传递给Vega Lite。对于Altair可以处理的数据集的大小,Vaex提供的数据表示和序列化的效率并不特别重要

如果您想自动实现这一点,可以注册一个支持vaex的新数据转换器。这应该可以做到:

将altair导入为alt
def vaex_数据_变压器(df):
尝试:
df=df.to__df()
除属性错误外:
通过
返回alt.data.default\u data\u transformer(df)
alt.data\u transformers.寄存器('vaex',vaex\u data\u transformer)
alt.data\u transformers.enable('vaex'))
启用此选项后,
alt.Chart()
将在接受pandas数据帧的任何位置接受vaex数据帧

import altair as alt
import numpy as np
import vaex
import datetime

base = datetime.datetime.today()
dates = [base - datetime.timedelta(days=x) for x in range(10)]

y1 = np.sin(range(10))
y2 = np.cos(range(10))

df = vaex.from_arrays(x=dates, y1=y1, y2=y2)

alt.Chart(df)\
.mark_line()\
.encode(alt.X('x:T'), alt.Y('y1:Q')) #.encode(alt.X('x'), alt.Y('y1'))