Timeline plot - separate color set for y-category

Hi

I have plotted a time series bar plot with two labels in β€œy” axis using plotly express. The β€œcolor” label is based on a third category. Here is a snapshot of simplified code and output:

import pandas as pd
import datetime
import plotly.express as px

df = pd.DataFrame(dict({
    'beginTime': [
        datetime.datetime.strptime('1/1/2008 1:00:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:15:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 2:00:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:00:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:02:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:20:15', '%m/%d/%Y %H:%M:%S'),
    ],
    'endTime': [
        datetime.datetime.strptime('1/1/2008 1:10:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:35:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 2:07:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:8:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:12:15', '%m/%d/%Y %H:%M:%S'),
        datetime.datetime.strptime('1/1/2008 1:59:15', '%m/%d/%Y %H:%M:%S'),
    ],
    'type': ['1', '1', '1', '2', '2', '2'],
    'activity': ['competition1', 'competition1', 'competition1', 'competition2', 'competition2', 'competition2'],
    'label': ['eat', 'sleep', 'write', 'write', 'code', 'sleep']
}
))
fig = px.timeline(df, x_start="beginTime", x_end="endTime", y="type", color='label')
fig.show()

My question is,

  1. how can I apply two seperate sets of colors for each of the labels in β€œy” axis (so the colors do not overlap)?
  2. or how can two sets of β€œcolor” map applied into one timeline plot?

Update:
I asked the same question in Stackoverflow and got an answer: