
:orphan:
:html_theme.sidebar_secondary.remove:

.. This document is auto-generated by the altair-gallery extension. Do not modify directly.

.. _gallery_top_k_with_others:


Top-K Plot with Others
----------------------
This example shows how to use aggregate, window, and calculate transformations
to display the top-k directors by average worldwide gross while grouping the 
remaining directors as 'All Others'.


.. altair-plot::
    :remove-code:
    


    import altair as alt
    from altair.datasets import data

    source = data.movies.url

    alt.Chart(source).mark_bar().encode(
        x=alt.X("aggregate_gross:Q", aggregate="mean", title=None),
        y=alt.Y(
            "ranked_director:N",
            sort=alt.Sort(op="mean", field="aggregate_gross", order="descending"),
            title=None,
        ),
    ).transform_aggregate(
        aggregate_gross='mean(Worldwide Gross)',
        groupby=["Director"],
    ).transform_window(
        rank='row_number()',
        sort=[alt.SortField("aggregate_gross", order="descending")],
    ).transform_calculate(
        ranked_director="datum.rank < 10 ? datum.Director : 'All Others'"
    ).properties(
        title="Top Directors by Average Worldwide Gross",
    )


.. tab-set::

    .. tab-item:: Method syntax
        :sync: method

        .. code:: python


            import altair as alt
            from altair.datasets import data

            source = data.movies.url

            alt.Chart(source).mark_bar().encode(
                alt.X("aggregate_gross:Q").aggregate("mean").title(None),
                alt.Y("ranked_director:N")
                    .sort(op="mean", field="aggregate_gross", order="descending")
                    .title(None)
            ).transform_aggregate(
                aggregate_gross='mean(Worldwide Gross)',
                groupby=["Director"],
            ).transform_window(
                rank='row_number()',
                sort=[alt.SortField("aggregate_gross", order="descending")],
            ).transform_calculate(
                ranked_director="datum.rank < 10 ? datum.Director : 'All Others'"
            ).properties(
                title="Top Directors by Average Worldwide Gross",
            )


    .. tab-item:: Attribute syntax
        :sync: attribute

        .. code:: python


            import altair as alt
            from altair.datasets import data

            source = data.movies.url

            alt.Chart(source).mark_bar().encode(
                x=alt.X("aggregate_gross:Q", aggregate="mean", title=None),
                y=alt.Y(
                    "ranked_director:N",
                    sort=alt.Sort(op="mean", field="aggregate_gross", order="descending"),
                    title=None,
                ),
            ).transform_aggregate(
                aggregate_gross='mean(Worldwide Gross)',
                groupby=["Director"],
            ).transform_window(
                rank='row_number()',
                sort=[alt.SortField("aggregate_gross", order="descending")],
            ).transform_calculate(
                ranked_director="datum.rank < 10 ? datum.Director : 'All Others'"
            ).properties(
                title="Top Directors by Average Worldwide Gross",
            )
