将 Facet class 传递给 Chart.facet 方法

Passing Facet class to Chart.facet method

我正在尝试创建一个函数来创建图表,您可以在其中将行、列或面 class 作为参数传递给图表。这是一个非常简化的版本:

def make_chart(data, x, y, **kwargs):
   return alt.Chart(data).mark_line().encode(x=x, y=y).facet(**kwargs)

如果我通过 行 = alt.Facet('z')列 = alt.Facet('z') 作为 kwargs 函数有效,但是如果我尝试传递 facet=alt.Facet('z', columns=2) 那么我得到一个错误,因为 facet 方法不接受 Facet class 作为输入,而是期望 field='z', columns=2.

所以我尝试使用 to_dict() 方法解压缩 alt.Facet('z', columns=2) 的参数,但我收到“指定的 Z 编码字段没有类型”错误。

我知道我可以使用 alt.Facet('z', columns=2)[属性] 访问 alt.Facet 的各个属性,但是有什么方法可以将所有属性作为字典获取?或者我可以将 alt.Facet 作为参数传递?

我需要创建一些分层的分面图表,所以我不能在编码中使用分面。

谢谢

A​​ltair 目前不允许 .facet(facet=alt.Facet('col', columns=1)),但您可以使用 .facet(facet=alt.Facet('col'), columns=1))

import altair as alt
import pandas as pd


def make_chart(data, x, y, **kwargs):
   return alt.Chart(data).mark_point().encode(x=x, y=y).facet(**kwargs)

make_chart(
    pd.DataFrame({'x': [1, 2], 'y': ['b', 'a']}),
    'x',
    'y',
    facet=alt.Facet('y'),
    columns=1
)