在分层多面图表上调整属性(例如宽度和高度)会产生 'data is a required property error'

adjusting properties (e.g. width and height) on a layered faceted chart produce a 'data is a required property error'

我正在尝试调整多面分层图表的宽度和高度。我有这两个图表:

bar_chart = alt.Chart().mark_bar().encode(x='x', y='mean(y)')
text_overlay = bar_chart.mark_text().encode(text='mean(y)')

如果我在对图表进行分层后尝试调整宽度:

alt.layer(bar_chart, text_overlay, data=df).facet('z').properties(width=100)

我收到 'data' is a required 属性 错误。

我可以通过调整其中一张原始图表来更改宽度和高度:

bar_chart = alt.Chart().mark_bar().encode(x='x', y='mean(y)').properties(width=100, height=200)

但我正在尝试 return 此图表作为函数的输出,因此我希望允许用户在函数之外调整属性。

有没有不需要将属性应用到原始图表的方法来解决这个错误?

谢谢。

我认为在使用 facet 作为编码时只能使用 .properties,但这与分层不兼容。您可以使用面向对象的语法在创建分面分层图表后设置 属性:

import altair as alt
import pandas as pd


chart = alt.Chart(pd.DataFrame({'x': [1, 2], 'y': ['b', 'a']})).mark_point().encode(x='x', y='y')
chart_layered = (chart + chart).facet(facet='y')
chart_layered.spec.width = 100
chart_layered

要弄清楚这些属性是什么,您可以使用 .properties 正确的方式创建多面分层图表并研究其字典或 json 输出:

chart = alt.Chart(pd.DataFrame({'x': [1, 2], 'y': ['b', 'a']})).mark_point().encode(x='x', y='y').properties(width=100).facet(facet='y')
chart.to_dict()
{'config': {'view': {'continuousWidth': 400, 'continuousHeight': 300}},
 'data': {'name': 'data-5f40ae3874157bbf64df213f9a844d59'},
 'facet': {'type': 'nominal', 'field': 'y'},
 'spec': {'mark': 'point',
  'encoding': {'x': {'type': 'quantitative', 'field': 'x'},
   'y': {'type': 'nominal', 'field': 'y'}},
  'width': 100},
 '$schema': 'https://vega.github.io/schema/vega-lite/v4.8.1.json',
 'datasets': {'data-5f40ae3874157bbf64df213f9a844d59': [{'x': 1, 'y': 'b'},
   {'x': 2, 'y': 'a'}]}}