在分层多面图表上调整属性(例如宽度和高度)会产生 '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'}]}}
我正在尝试调整多面分层图表的宽度和高度。我有这两个图表:
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'}]}}