I was plotting a dataset with many rows per country as a sunburst chart using Plotly. After joining the countries of the Natural Earth Dataset into my Pandas dataframe, I also had the columns ‘CONTINENT’ and ‘SUBREGION’, so I could do:
import plotly.express as px fig = px.sunburst( df, path=[px.Constant("World"), 'CONTINENT', 'SUBREGION', 'country'], values='Qty')
However, after using this approach in a Dashboard powered by Dash, the colors used for continents changed depending on the applied filters. This means I had to use fixed colors for the continents, like so:
# Set up dictionary with colors for each continent cat_colors={} for i, continent in enumerate(countries["CONTINENT"].unique()): cat_colors[continent] = px.colors.qualitative.Dark2[i] fig = px.sunburst( df, path=[px.Constant("World"), 'CONTINENT', 'SUBREGION', 'country'], values='Qty', color_discrete_map=cat_colors, color='CONTINENT', )
Unfortunately, there is no way to set the color of “World” at this point, it just gets a random color (and in my dashboard, the color changed depending on the filters). I couldn’t find any solution on the web, even asking ChatGPT did not help. After a long time, I remembered that Plotly fig objects are basically JSON; it is easy to inspect the JSON data and to change it afterwards. To set the color of “World” to grey, simply run:
colors = list(fig.data[0].marker.colors) colors[-1] = "#999999" fig.update_traces(marker=dict(colors=colors))
Data: UN Comtrade database, Sources of Petroleum imports to Germany in 2023