
:orphan:
:html_theme.sidebar_secondary.remove:

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

.. _gallery_layered_heatmap_text:


Text over a Heatmap
-------------------

An example of a layered chart of text over a heatmap using the cars dataset.


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


    import altair as alt
    from altair.datasets import data

    source = data.cars()

    # Configure common options. We specify the aggregation
    # as a transform here so we can reuse it in both layers.
    base = alt.Chart(source).transform_aggregate(
        mean_horsepower='mean(Horsepower)',
        groupby=['Origin', 'Cylinders']
    ).encode(
        alt.X('Cylinders:O'),
        alt.Y('Origin:O'),
    )

    # Configure heatmap
    heatmap = base.mark_rect().encode(
        color=alt.Color('mean_horsepower:Q',
            scale=alt.Scale(scheme='viridis'),
            legend=alt.Legend(title="Mean of Horsepower"),
        )
    )

    color = (
        alt.when(alt.datum.mean_horsepower > 150)
        .then(alt.value("black"))
        .otherwise(alt.value("white"))
    )
    # Configure text
    text = base.mark_text(baseline='middle').encode(
        text=alt.Text('mean_horsepower:Q', format=".0f"), color=color
    )

    # Draw the chart
    heatmap + text


.. tab-set::

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

        .. code:: python


            import altair as alt
            from altair.datasets import data

            source = data.cars()

            # Configure common options. We specify the aggregation
            # as a transform here so we can reuse it in both layers.
            base = alt.Chart(source).transform_aggregate(
                mean_horsepower='mean(Horsepower)',
                groupby=['Origin', 'Cylinders']
            ).encode(
                alt.X('Cylinders:O'),
                alt.Y('Origin:O'),
            )

            # Configure heatmap
            heatmap = base.mark_rect().encode(
                alt.Color('mean_horsepower:Q')
                    .scale(scheme='viridis')
                    .title("Mean of Horsepower")
            )

            color = (
                alt.when(alt.datum.mean_horsepower > 150)
                .then(alt.value("black"))
                .otherwise(alt.value("white"))
            )

            # Configure text
            text = base.mark_text(baseline='middle').encode(
                alt.Text('mean_horsepower:Q', format=".0f"), color=color
            )

            # Draw the chart
            heatmap + text


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

        .. code:: python


            import altair as alt
            from altair.datasets import data

            source = data.cars()

            # Configure common options. We specify the aggregation
            # as a transform here so we can reuse it in both layers.
            base = alt.Chart(source).transform_aggregate(
                mean_horsepower='mean(Horsepower)',
                groupby=['Origin', 'Cylinders']
            ).encode(
                alt.X('Cylinders:O'),
                alt.Y('Origin:O'),
            )

            # Configure heatmap
            heatmap = base.mark_rect().encode(
                color=alt.Color('mean_horsepower:Q',
                    scale=alt.Scale(scheme='viridis'),
                    legend=alt.Legend(title="Mean of Horsepower"),
                )
            )

            color = (
                alt.when(alt.datum.mean_horsepower > 150)
                .then(alt.value("black"))
                .otherwise(alt.value("white"))
            )
            # Configure text
            text = base.mark_text(baseline='middle').encode(
                text=alt.Text('mean_horsepower:Q', format=".0f"), color=color
            )

            # Draw the chart
            heatmap + text
