Python
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

# Exemple de données de tâches
tasks = [
    {"name": "Tâche 1", "start": "2023-10-01", "end": "2023-10-05"},
    {"name": "Tâche 2", "start": "2023-10-03", "end": "2023-10-10"},
    {"name": "Tâche 3", "start": "2023-10-07", "end": "2023-10-15"},
]

# Convertir les dates en objets datetime
for task in tasks:
    task["start"] = datetime.strptime(task["start"], "%Y-%m-%d")
    task["end"] = datetime.strptime(task["end"], "%Y-%m-%d")

# Créer le diagramme de Gantt
fig, ax = plt.subplots(figsize=(10, len(tasks)))

for i, task in enumerate(tasks):
    ax.barh(task["name"], (task["end"] - task["start"]).days, left=task["start"], color='skyblue')

# Formater l'axe des dates
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
plt.xticks(rotation=45)

# Ajouter des labels et un titre
ax.set_xlabel('Date')
ax.set_ylabel('Tâches')
ax.set_title('Diagramme de Gantt')

# Afficher le diagramme
plt.tight_layout()
plt.show()
Can't find a pure Python 3 wheel for: 'matplotlib-pyplot'
See: https://pyodide.org/en/stable/usage/faq.html#why-can-t-micropip-find-a-pure-python-wheel-for-a-package

Can't find a pure Python 3 wheel for: 'matplotlib-dates'
See: https://pyodide.org/en/stable/usage/faq.html#why-can-t-micropip-find-a-pure-python-wheel-for-a-package
Matplotlib is building the font cache; this may take a moment.
Python
import plotly.express as px
import pandas as pd

# Exemple de données
data = [
    {"Task": "Tâche 1", "Start": "2023-10-01", "Finish": "2023-10-05"},
    {"Task": "Tâche 2", "Start": "2023-10-03", "Finish": "2023-10-10"},
    {"Task": "Tâche 3", "Start": "2023-10-07", "Finish": "2023-10-15"},
]

df = pd.DataFrame(data)
df["Start"] = pd.to_datetime(df["Start"])
df["Finish"] = pd.to_datetime(df["Finish"])

# Créer le diagramme de Gantt
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", title="Diagramme de Gantt avec Plotly")
fig.update_yaxes(categoryorder="total ascending")
fig.show()
import plotly.express as px
import pandas as pd

# Exemple de données
data = [
    {"Task": "Tâche 1", "Start": "2023-10-01", "Finish": "2023-10-05"},
    {"Task": "Tâche 2", "Start": "2023-10-03", "Finish": "2023-10-10"},
    {"Task": "Tâche 3", "Start": "2023-10-07", "Finish": "2023-10-15"},
]

df = pd.DataFrame(data)
df["Start"] = pd.to_datetime(df["Start"])
df["Finish"] = pd.to_datetime(df["Finish"])

# Créer le diagramme de Gantt
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", title="Diagramme de Gantt avec Plotly")
fig.update_yaxes(categoryorder="total ascending")
fig.show()
add color by task
Python
import plotly.express as px
import pandas as pd

# Exemple de données avec une colonne de couleur
data = [
    {"Task": "Tâche 1", "Start": "2023-10-01", "Finish": "2023-10-05", "Color": "blue"},
    {"Task": "Tâche 2", "Start": "2023-10-03", "Finish": "2023-10-10", "Color": "green"},
    {"Task": "Tâche 3", "Start": "2023-10-07", "Finish": "2023-10-15", "Color": "orange"},
]

df = pd.DataFrame(data)
df["Start"] = pd.to_datetime(df["Start"])
df["Finish"] = pd.to_datetime(df["Finish"])

# Créer le diagramme de Gantt avec couleur par tâche
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Color", title="Diagramme de Gantt avec couleurs par tâche")
fig.update_yaxes(categoryorder="total ascending")
fig.show()
add a 20% progression on task 1
Python
import plotly.express as px
import pandas as pd

# Exemple de données avec une colonne de couleur et progression
data = [
    {"Task": "Tâche 1", "Start": "2023-10-01", "Finish": "2023-10-05", "Color": "blue", "Progress": 0.2},
    {"Task": "Tâche 2", "Start": "2023-10-03", "Finish": "2023-10-10", "Color": "green", "Progress": 0},
    {"Task": "Tâche 3", "Start": "2023-10-07", "Finish": "2023-10-15", "Color": "orange", "Progress": 0},
]

df = pd.DataFrame(data)
df["Start"] = pd.to_datetime(df["Start"])
df["Finish"] = pd.to_datetime(df["Finish"])

# Calculer la date de progression pour Tâche 1
df["Progress_Start"] = df["Start"] + (df["Finish"] - df["Start"]) * df["Progress"]

# Créer le diagramme de Gantt avec couleur par tâche et progression
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Color", title="Diagramme de Gantt avec couleurs et progression par tâche")
fig.add_scatter(x=df["Progress_Start"], y=df["Task"], mode='markers', marker=dict(size=10, color='red'), name='Progression')
fig.update_yaxes(categoryorder="total ascending")
fig.show()
progression should be done using variation of color on the task
line 24, in 
    fig.add_trace(px.bar(x=[row["Progress_Start"], row["Finish"]],
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: bar() got an unexpected keyword argument 'marker_color'
keep point to show progression
sort by starting date
Python
import plotly.express as px
import pandas as pd

# Exemple de données avec une colonne de couleur et progression
data = [
    {"Task": "Tâche 1", "Start": "2023-10-01", "Finish": "2023-10-05", "Color": "blue", "Progress": 0.2},
    {"Task": "Tâche 2", "Start": "2023-10-03", "Finish": "2023-10-10", "Color": "green", "Progress": 0},
    {"Task": "Tâche 3", "Start": "2023-10-07", "Finish": "2023-10-15", "Color": "orange", "Progress": 0},
]

df = pd.DataFrame(data)
df["Start"] = pd.to_datetime(df["Start"])
df["Finish"] = pd.to_datetime(df["Finish"])

# Trier par date de début
df = df.sort_values(by="Start")

# Calculer la date de progression pour Tâche 1
df["Progress_Start"] = df["Start"] + (df["Finish"] - df["Start"]) * df["Progress"]

# Créer le diagramme de Gantt avec couleur par tâche et progression
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Color", title="Diagramme de Gantt avec couleurs et progression par tâche")
fig.add_scatter(x=df["Progress_Start"], y=df["Task"], mode='markers', marker=dict(size=10, color='red'), name='Progression')
fig.update_yaxes(categoryorder="total ascending")
fig.show()
add at the rigth of progression point value of progression in pourcentage
Python
import plotly.express as px
import pandas as pd

# Exemple de données avec une colonne de couleur et progression
data = [
    {"Task": "Tâche 1", "Start": "2023-10-01", "Finish": "2023-10-05", "Color": "blue", "Progress": 0.2},
    {"Task": "Tâche 2", "Start": "2023-10-03", "Finish": "2023-10-10", "Color": "green", "Progress": 0},
    {"Task": "Tâche 3", "Start": "2023-10-07", "Finish": "2023-10-15", "Color": "orange", "Progress": 0},
]

df = pd.DataFrame(data)
df["Start"] = pd.to_datetime(df["Start"])
df["Finish"] = pd.to_datetime(df["Finish"])

# Trier par date de début
df = df.sort_values(by="Start")

# Calculer la date de progression pour Tâche 1
df["Progress_Start"] = df["Start"] + (df["Finish"] - df["Start"]) * df["Progress"]

# Créer le diagramme de Gantt avec couleur par tâche et progression
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Color", title="Diagramme de Gantt avec couleurs et progression par tâche")
fig.add_scatter(x=df["Progress_Start"], y=df["Task"], mode='markers', marker=dict(size=10, color='red'), name='Progression')

# Ajouter les valeurs de progression en pourcentage
for i, row in df.iterrows():
    fig.add_annotation(
        x=row["Progress_Start"],
        y=row["Task"],
        text=f"{int(row['Progress'] * 100)}%",
        showarrow=True,
        arrowhead=2,
        ax=20,
        ay=-10
    )

fig.update_yaxes(categoryorder="total ascending")
fig.show()