How to use “getColorR”, “getColorG”, “getColorB” in st.deck_gl_chart

In st.deck_gl_chart, how to use “getColorR”, “getColorG”, “getColorB" to color items based the value on a particular column? If I need everything to be in green, do I pass a numeric value ‘getColorB’: 255? That doesn’t seem to work. If I need the color to vary based on some value, how can I use these 3 variables together for a non-monotone color palette such as viridis? Thanks for any input.

code snippet below

midpoint = (np.average(df["start_latitude"]),
            np.average(df["start_longitude"]))
st.deck_gl_chart(
    viewport={"latitude": midpoint[0],
              "longitude": midpoint[1], "zoom": 11, "pitch": 50},
    layers=[
        {
            "type": "ArcLayer",
            "data": df,
            "getLatitude": "start_latitude",
            "getLongitude": "end_longitude",
            "getTargetLatitude": 'start_latitude',
            "getTargetLongitude": 'end_longitude',
            "getColorR": ?,
            "getColorG": ?,
            "getColorB": ?
        }
    ]
)

Hi @yellowPanther!

The best thing to do would be to move to st.pydeck_chart, and set get_color there. We are deprecating st.deck_gl_chart and trying to get people to move to st.pydeck_chart, which uses PyDeck to build the DeckGL chart, since:

  1. st.deck_gl_chart doesn’t support several DeckGL features, while st.pydeck_chart support pretty much everything!
  2. st.deck_gl_chart has some “sharp edges”, like this getColorR/G/B business.
  3. st.pydeck_chart supports powerful expression strings as arguments
  4. st.deck_gl_chart is hard for Streamlit devs to maintain

To switch to st.pydeck_chart:

(Note: the code below has not been tested!)

import pydeck as pdk

midpoint = (np.average(df["start_latitude"]),
            np.average(df["start_longitude"]))

st.pydeck_chart(pdk.Deck(
    map_style='mapbox://styles/mapbox/light-v9',
    initial_view_state=pdk.ViewState(
        latitude=midpoint[0],
        longitude=midpoint[1],
        zoom=11,
        pitch=50,
    ),
    layers=[
        pdk.Layer(
            "ArcLayer",
            data=df,
            get_source_position="[start_longitude, start_latitude]",  # This is an example of an expression
            get_target_position="[end_longitude, end_latitude]",
            get_source_color=[255, 0, 0, 128],
            get_target_color=[0, 0, 255, 128],
        )
    ]
))
2 Likes

Thanks so much for the answer!