Как нарисовать только одну отметку для одной группы без кодирования - PullRequest
3 голосов
/ 18 мая 2019
import altair as alt
from vega_datasets import data
cars = data.cars()
alt.Chart(cars).mark_point(opacity=0.1).encode(
    x="Cylinders:O",
    y="Origin"
)

Рисует много точек в одной позиции:

enter image description here

чтобы нарисовать только одну точку в одном месте, мне нужно добавитькодировать в count(),

alt.Chart(cars).mark_point(opacity=0.3).encode(
    x="Cylinders:O",
    y="Origin",
    tooltip="count()"
)

enter image description here или с помощью transform_aggregate(), но мне нужно установить аргумент groupby:

alt.Chart(cars).mark_point(opacity=0.4).encode(
    x="Cylinders:O",
    y="Origin",
).transform_aggregate(
    count="count()",
    groupby=["Cylinders", "Origin"]
)

IХотите знать, есть ли способ, который может сделать это без transform_aggregate() или count().

1 Ответ

3 голосов
/ 18 мая 2019

Altair будет показывать одну точку для каждой строки данных, если вы не передадите агрегат явно, либо с помощью кодировки, либо с помощью преобразования.

Если вы хотите применить агрегат, который не влияет на диаграмму за пределамиПри агрегации самый простой способ сделать это - через канал detail (что примерно означает «добавить эту кодировку, но ничего с ней не делать»):

alt.Chart(cars).mark_point(opacity=0.4).encode(
    x="Cylinders:O",
    y="Origin:N",
    detail='count()'
)

enter image description here

...