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()
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
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()
change shape round rectangle
trace a dot line on 9 october
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 une ligne pointillée sur le 9 octobre
fig.add_shape(
    type="line",
    x0="2023-10-09", y0=-0.5, x1="2023-10-09", y1=len(df)-0.5,
    line=dict(color="black", width=2, dash="dot"),
)

# 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()
in red
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},
]

# Conversion des données en DataFrame
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 chaque tâche
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")

# Ajouter des marqueurs pour la progression
fig.add_scatter(x=df["Progress_Start"], y=df["Task"], mode='markers', marker=dict(size=10, color='red'), name='Progression')

# Ajouter une ligne pointillée sur le 9 octobre en rouge
fig.add_shape(
    type="line",
    x0="2023-10-09", y0=-0.5, x1="2023-10-09", y1=len(df)-0.5,
    line=dict(color="red", width=2, dash="dot"),
)

# 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,
        font=dict(color='red')  # Changer la couleur du texte en rouge
    )

# Mettre à jour l'ordre des catégories sur l'axe y
fig.update_yaxes(categoryorder="total ascending")

# Afficher le diagramme
fig.show()