Как я могу передать null в качестве значения для агрегированного поля из Python?
Я бы хотел этого добиться:
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
"mark": {"type": "bar", "tooltip": true},
"encoding": {
"x": {"field": "Creative Type", "type": "nominal", "aggregate": null},
"y": {"field": "Creative Type", "type": "nominal", "aggregate": "count"}
Я передаю значения из Python в вегалит. Поскольку Python не имеет ключевого слова null, я не знаю, как установить значение для агрегата как null по оси x. Любая помощь приветствуется. Спасибо!
2 ответа
Эквивалент ключевого слова null в Python будет None. Пожалуйста, проверьте, работает ли это.
В общем, попутно
None
в Python / Altair приведет к JSON / vega. Например, при скрытии легенды (
"legend": null
в Vega-Lite) можно использовать
legend=None
в Альтаире, как упоминалось в Корректировке легенды .
Однако в случае агрегатов это не сработает: согласно схеме Vega-Lite,
null
не верный аргумент для
aggregate
, поэтому попытка сделать это в Альтаире приведет к
SchemaValidationError
.
Если по какой-то причине вы действительно хотите создать эту недопустимую спецификацию, вы можете сделать это, передав
validate=False
к
alt.Chart.to_json
:
import altair as alt
chart = alt.Chart().mark_bar(tooltip=True).encode(
x=alt.X('Creative Type:N', aggregate=None),
y=alt.Y('Creative Type:N', aggregate='count')
)
print(chart.to_json(validate=False))
# {
# "$schema": "https://vega.github.io/schema/vega-lite/v4.8.1.json",
# "config": {
# "view": {
# "continuousHeight": 300,
# "continuousWidth": 400
# }
# },
# "encoding": {
# "x": {
# "aggregate": null,
# "field": "Creative Type",
# "type": "nominal"
# },
# "y": {
# "aggregate": "count",
# "field": "Creative Type",
# "type": "nominal"
# }
# },
# "mark": {
# "tooltip": true,
# "type": "bar"
# }
# }