How can I set cmap for st.scatter_chart?

How can I set cmap for st.scatter_chart? Instead of a gradient (white to blue), I’d prefer to use discrete colors to distinguish.

i posted this in Discord also

If you have a categorical column, you can pass that as the colors argument and each point will have a distinct color based on that column.

import streamlit as st
import pandas as pd

df = pd.DataFrame(
    {
        "A": [1, 2, 3, 4, 5],
        "B": ["a", "b", "c", "b", "a"],
        "C": [2, 4, 8, 16, 32],
    }
)

st.scatter_chart(df, x="A", y="C", color="B")

If you want to use a specific color pallet, you can use altair directly, rather than using st.scatter_chart. Here is the list of color pallets available for categorical values Color Schemes | Vega

import altair as alt
schemes = ["category10", "accent", "dark2", "paired", "pastel1", "set1", "set2", "set3"]

scheme = st.selectbox("Color scheme", schemes)

chart = (
    alt.Chart(df)
    .mark_circle(size=100)
    .encode(
        x="A",
        y="C",
        color=alt.Color("B:N", scale=alt.Scale(scheme=scheme)),
    )
)

st.altair_chart(chart, use_container_width=True)

You can also use a different plotting library of your choice.

1 Like

Thank you very much.
The second solution is exactly what i needed.
I appreciate your support

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.