Announcing Dash Bio 1.0.0 🎉 : a one-stop-shop for bioinformatics and drug development visualizations.

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: