
:orphan:
:html_theme.sidebar_secondary.remove:

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

.. _gallery_line_chart_with_custom_legend:


Line Chart with Custom Legend
-----------------------------
This example uses the argmax aggregation function in order to create a custom
legend for a line chart.


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


    import altair as alt
    from altair.datasets import data


    source = data.stocks()

    base = alt.Chart(source).encode(
        color=alt.Color("symbol", legend=None)
    ).transform_filter(
        "datum.symbol !== 'IBM'"
    ).properties(
        width=500
    )

    line = base.mark_line().encode(x="date", y="price")


    last_price = base.mark_circle().encode(
        x=alt.X("last_date['date']:T"),
        y=alt.Y("last_date['price']:Q")
    ).transform_aggregate(
        last_date="argmax(date)",
        groupby=["symbol"]
    )

    company_name = last_price.mark_text(align="left", dx=4).encode(text="symbol")

    chart = (line + last_price + company_name).encode(
        x=alt.X(title="date"),
        y=alt.Y(title="price")
    )

    chart


.. tab-set::

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

        .. code:: python


            import altair as alt
            from altair.datasets import data


            source = data.stocks()

            base = alt.Chart(source).encode(
                alt.Color("symbol").legend(None)
            ).transform_filter(
                "datum.symbol !== 'IBM'"
            ).properties(
                width=500
            )

            line = base.mark_line().encode(x="date", y="price")


            last_price = base.mark_circle().encode(
                alt.X("last_date['date']:T"),
                alt.Y("last_date['price']:Q")
            ).transform_aggregate(
                last_date="argmax(date)",
                groupby=["symbol"]
            )

            company_name = last_price.mark_text(align="left", dx=4).encode(text="symbol")

            chart = (line + last_price + company_name).encode(
                x=alt.X().title("date"),
                y=alt.Y().title("price")
            )

            chart


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

        .. code:: python


            import altair as alt
            from altair.datasets import data


            source = data.stocks()

            base = alt.Chart(source).encode(
                color=alt.Color("symbol", legend=None)
            ).transform_filter(
                "datum.symbol !== 'IBM'"
            ).properties(
                width=500
            )

            line = base.mark_line().encode(x="date", y="price")


            last_price = base.mark_circle().encode(
                x=alt.X("last_date['date']:T"),
                y=alt.Y("last_date['price']:Q")
            ).transform_aggregate(
                last_date="argmax(date)",
                groupby=["symbol"]
            )

            company_name = last_price.mark_text(align="left", dx=4).encode(text="symbol")

            chart = (line + last_price + company_name).encode(
                x=alt.X(title="date"),
                y=alt.Y(title="price")
            )

            chart
