Open
Description
Here is the baseline plot :
import plotly.express as px
import pandas as pd
from datetime import timedelta
# Example data
df = pd.DataFrame({
"Task": ["Task A", "Task B", "Task C"],
"Start": ["2023-01-01 08:00:00", "2023-01-02 09:30:00", "2023-01-04 11:00:00"],
"Finish": ["2023-01-01 15:00:00", "2023-01-02 20:00:00", "2023-01-04 19:00:00"],
})
# Create the timeline figure
fig = px.timeline(
df,
x_start="Start",
x_end="Finish",
y="Task",
title="Timeline with major and minor ticks on x axis",
)
df['Start'] = pd.to_datetime(df['Start'])
df['Finish'] = pd.to_datetime(df['Finish'])
# Define tick positions and labels
horizon_start = df['Start'].min().replace(hour=0, minute=0)
horizon_end = df['Finish'].max().replace(hour=0, minute=0) + timedelta(days=1)
minor_ticks = pd.date_range(horizon_start, horizon_end, freq="6h")
fig.update_xaxes(
showgrid=True,
gridcolor="lightgray",
gridwidth=2,
dtick="D1",
tickformat="%e %b",
tickangle=-45,
minor={
"ticklen": 3,
"tickcolor": "lightgray",
"tickmode": "array",
"showgrid": True,
"gridwidth": 0.5,
"tickvals": minor_ticks,
},
)
# Show the figure
fig.show()
I would like to have the possibility of displaying ticktext
for minor ticks + ticktextcolor
+ ticktextfontsize
, with something like :
minor_text = [t.strftime('%Hh').lstrip('0') if t.hour != 0 else "0h" for t in minor_ticks]
fig.update_xaxes(
(...)
minor={
"ticklen": 3,
"tickcolor": "lightgray",
"tickmode": "array",
"showgrid": True,
"gridwidth": 0.5,
"tickvals": minor_ticks,
"ticktext": minor_text,
"ticktextcolor": 'lightgray',
"ticktextfontsize": 5,
},
)
Ideally, for the ticks that are both in major and minor ticks, only the major tick text would be displayed.