代码之家  ›  专栏  ›  技术社区  ›  HYRY

如何在不使用编码的情况下只为一个组绘制一个标记

  •  1
  • HYRY  · 技术社区  · 6 年前
    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"]
    )
    

    我想知道有没有什么方法可以做到这一点 转换聚合() 计数() .

    1 回复  |  直到 6 年前
        1
  •  3
  •   jakevdp    6 年前

    除非通过编码或转换明确传递聚合,否则Altair将为每行数据显示一个点。

    如果要应用对图表没有影响的聚合(聚合操作除外),最简单的方法是通过 detail 频道(大致意思是“添加此编码,但不要对其执行任何操作”):

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

    enter image description here