Как я могу передать 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"
#   }
# }
Другие вопросы по тегам