Lewati ke konten utama

Cara Membuat Diagram Gantt di Python dengan Matplotlib

Pelajari cara membuat diagram Gantt di Python dengan matplotlib dan mengapa visualisasi seperti ini bermanfaat.
· 10 mnt Baca

Jelajahi bersama AI

Dalam panduan langkah demi langkah ini, kita akan membahas apa itu diagram Gantt, mengapa dan kapan visualisasi seperti ini berguna, cara membuat diagram Gantt di Python dengan matplotlib, serta bagaimana menyesuaikannya lebih lanjut. Sepanjang jalan, kita akan membangun beberapa contoh diagram Gantt di matplotlib.

Apa Itu Diagram Gantt dan Mengapa Berguna?

Diagram Gantt adalah jenis plot batang yang digunakan untuk menggambarkan perencanaan dan pengelolaan proyek secara menyeluruh. Biasanya menampilkan elemen seperti nama tugas proyek, tanggal mulai dan selesai, tim yang bertanggung jawab atas tugas-tugas tersebut, status penyelesaian tugas dalam persen atau pecahan, kinerja per tim, serta tonggak penting proyek.

Nama tugas disusun di sepanjang sumbu-y diagram Gantt, biasanya diurutkan berdasarkan tanggal mulai secara kronologis dari atas ke bawah. Sementara itu, sumbu-x digunakan untuk menampilkan periode waktu, dengan lebar setiap batang sesuai dengan durasi pelaksanaan masing-masing tugas.

Karena diagram Gantt pada dasarnya merupakan bentuk khusus dari plot batang horizontal, kita dapat membuatnya di banyak pustaka visualisasi data Python, termasuk matplotlib, Plotly, Bokeh, dan Altair. Dalam tutorial ini, kita akan berfokus pada pembuatan diagram Gantt di yang paling populer – matplotlib.

Jika Anda ingin mengeksplorasi cara alternatif membuat diagram Gantt dan jenis plot lainnya di Python, silakan pelajari kursus Introduction to Data Visualization with Plotly in Python. Jika Anda perlu menyegarkan atau mengembangkan keterampilan matplotlib, kursus-kursus ini akan berguna: Introduction to Data Visualization with Matplotlib dan Python for MATLAB Users.

Cara Membuat Diagram Gantt di Python Dengan Matplotlib

Menggunakan barh()

Mari mulai dengan membangun diagram Gantt dasar di matplotlib menggunakan metode barh() dari matplotlib.pyplot.

Pertama, kita perlu mengunduh pustaka yang diperlukan:

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import datetime as dt

Langkah berikutnya adalah membuat data dummy untuk dikerjakan:

df = pd.DataFrame({'task': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'],
                  'team': ['R&D', 'Accounting', 'Sales', 'Sales', 'IT', 'R&D', 'IT', 'Sales', 'Accounting', 'Accounting', 'Sales', 'IT'],
                  'start': pd.to_datetime(['20 Oct 2022', '24 Oct 2022', '26 Oct 2022', '31 Oct 2022', '3 Nov 2022', '7 Nov 2022', '10 Nov 2022', '14 Nov 2022', '18 Nov 2022', '23 Nov 2022', '28 Nov 2022', '30 Nov 2022']),
                  'end': pd.to_datetime(['31 Oct 2022', '28 Oct 2022', '31 Oct 2022', '8 Nov 2022', '9 Nov 2022', '18 Nov 2022', '17 Nov 2022', '22 Nov 2022', '23 Nov 2022', '1 Dec 2022', '5 Dec 2022', '5 Dec 2022']),
                  'completion_frac': [1, 1, 1, 1, 1, 0.95, 0.7, 0.35, 0.1, 0, 0, 0]})
print(df)

Keluaran:

  task        team      start        end  completion_frac
0     A         R&D 2022-10-20 2022-10-31             1.00
1     B  Accounting 2022-10-24 2022-10-28             1.00
2     C       Sales 2022-10-26 2022-10-31             1.00
3     D       Sales 2022-10-31 2022-11-08             1.00
4     E          IT 2022-11-03 2022-11-09             1.00
5     F         R&D 2022-11-07 2022-11-18             0.95
6     G          IT 2022-11-10 2022-11-17             0.70
7     H       Sales 2022-11-14 2022-11-22             0.35
8     I  Accounting 2022-11-18 2022-11-23             0.10
9     J  Accounting 2022-11-23 2022-12-01             0.00
10    K       Sales 2022-11-28 2022-12-05             0.00
11    L          IT 2022-11-30 2022-12-05             0.00

Untuk memudahkan pembuatan diagram Gantt untuk data ini, kita perlu menghitung empat kolom lagi yang akan merepresentasikan informasi berikut:

  1. Berapa hari yang telah/akan berlalu sejak awal proyek hingga tanggal mulai setiap tugas:
df['days_to_start'] = (df['start'] - df['start'].min()).dt.days
  1. Berapa hari yang telah/akan berlalu sejak awal proyek hingga tanggal selesai setiap tugas:
df['days_to_end'] = (df['end'] - df['start'].min()).dt.days
  1. Durasi setiap tugas, termasuk baik tanggal mulai maupun tanggal selesai:
df['task_duration'] = df['days_to_end'] - df['days_to_start'] + 1  # to include also the end date
  1. Status penyelesaian setiap tugas yang diterjemahkan dari pecahan menjadi porsi hari yang dialokasikan untuk tugas tersebut:
df['completion_days'] = df['completion_frac'] * df['task_duration']

Mari periksa apa yang kita peroleh:

print(df)

Keluaran:

  task        team      start        end  completion_frac  days_to_start  \
0     A         R&D 2022-10-20 2022-10-31             1.00              0  
1     B  Accounting 2022-10-24 2022-10-28             1.00              4  
2     C       Sales 2022-10-26 2022-10-31             1.00              6  
3     D       Sales 2022-10-31 2022-11-08             1.00             11  
4     E          IT 2022-11-03 2022-11-09             1.00             14  
5     F         R&D 2022-11-07 2022-11-18             0.95             18  
6     G          IT 2022-11-10 2022-11-17             0.70             21  
7     H       Sales 2022-11-14 2022-11-22             0.35             25  
8     I  Accounting 2022-11-18 2022-11-23             0.10             29  
9     J  Accounting 2022-11-23 2022-12-01             0.00             34  
10    K       Sales 2022-11-28 2022-12-05             0.00             39  
11    L          IT 2022-11-30 2022-12-05             0.00             41  

    days_to_end  task_duration  completion_days 
0            11             12            12.00 
1             8              5             5.00 
2            11              6             6.00 
3            19              9             9.00 
4            20              7             7.00 
5            29             12            11.40 
6            28              8             5.60 
7            33              9             3.15 
8            34              6             0.60 
9            42              9             0.00 
10           46              8             0.00 
11           46              6             0.00 

Sekarang, kita siap menghasilkan diagram Gantt dasar di matplotlib:

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()

Keluaran:

Gantt Chart in Matplotlib

Plot di atas memerlukan beberapa penyesuaian agar kita bisa mendapatkan informasi maksimal darinya:

  • Menambahkan judul yang bermakna dan label sumbu-x (tanggal)
  • Membalik sumbu-y agar semua tugas berurutan secara kronologis dari atas ke bawah
  • Menambahkan grid
  • Mewarnai tugas berdasarkan tim
  • Menampilkan legenda
  • Menambahkan status penyelesaian tugas

Kita akan menerapkan semua penyempurnaan tersebut segera. Namun sebelum itu, mari pertimbangkan bagaimana membuat diagram Gantt dasar.

Menggunakan broken_barh()

Ketika beberapa tugas memiliki dua atau lebih sub-tugas yang tersebar dalam rentang waktu, kita sebaiknya menggunakan metode matplotlib lainnya – broken_barh().

Untuk memiliki data dummy guna mencoba pendekatan ini, mari lakukan hal berikut:

  1. Ambil dari dataframe awal kita hanya tugas-tugas yang ditugaskan ke tim Sales (untuk saat ini, abaikan kolom completion_frac).
  2. Ubah nama kolom start dan end menjadi start_1 dan end_1 masing-masing (demi kemudahan).
  3. Tambahkan lebih banyak sub-tugas ke beberapa tugas yang ada.
  4. Untuk setiap sub-tugas, hitung tiga kolom seperti yang ditunjukkan di atas yang merepresentasikan informasi berikut:
    • Berapa hari yang telah/akan berlalu sejak awal proyek hingga tanggal mulai setiap sub-tugas.
    • Berapa hari yang telah/akan berlalu sejak awal proyek hingga tanggal selesai setiap sub-tugas.
    • Durasi setiap sub-tugas, termasuk baik tanggal mulai maupun tanggal selesai.
# 1
df2 = df[df['team']=='Sales'][['task', 'team', 'start', 'end']]

# 2
df2.rename(columns={'start': 'start_1', 'end': 'end_1'}, inplace=True)
df2.reset_index(drop=True, inplace=True)

# 3
df2['start_2'] = pd.to_datetime([None, '10 Nov 2022', '25 Nov 2022', None])
df2['end_2'] = pd.to_datetime([None, '14 Nov 2022', '28 Nov 2022', None])
df2['start_3'] = pd.to_datetime([None, None, '1 Dec 2022', None])
df2['end_3'] = pd.to_datetime([None, None, '5 Dec 2022', None])

# 4
for i in [1, 2, 3]:
    suffix = '_' + str(i)
    df2['days_to_start' + suffix] = (df2['start' + suffix] - df2['start_1'].min()).dt.days
    df2['days_to_end' + suffix] = (df2['end' + suffix] - df2['start_1'].min()).dt.days
    df2['task_duration' + suffix] = df2['days_to_end' + suffix] - df2['days_to_start' + suffix] + 1


print(df2)

Keluaran:

task   team    start_1      end_1    start_2      end_2    start_3  \
0    C  Sales 2022-10-26 2022-10-31        NaT        NaT        NaT  
1    D  Sales 2022-10-31 2022-11-08 2022-11-10 2022-11-14        NaT  
2    H  Sales 2022-11-14 2022-11-22 2022-11-25 2022-11-28 2022-12-01  
3    K  Sales 2022-11-28 2022-12-05        NaT        NaT        NaT  

      end_3  days_to_start_1  days_to_end_1  task_duration_1  \
0        NaT                0              5                6  
1        NaT                5             13                9  
2 2022-12-05               19             27                9  
3        NaT               33             40                8  

  days_to_start_2  days_to_end_2  task_duration_2  days_to_start_3  \
0              NaN            NaN              NaN              NaN  
1             15.0           19.0              5.0              NaN  
2             30.0           33.0              4.0             36.0  
3              NaN            NaN              NaN              NaN  

  days_to_end_3  task_duration_3 
0            NaN              NaN 
1            NaN              NaN 
2           40.0              5.0 
3            NaN              NaN 

Perhatikan bahwa kini tugas D memiliki dua sub-tugas, tugas H memiliki tiga sub-tugas, dan tugas C serta K masing-masing memiliki satu sub-tugas. Jadi, tugas D dan H adalah tugas yang akan kita terapkan metode broken_barh(). Karena sintaks metode ini sedikit kurang intuitif dibandingkan barh(), mari lihat parameter utamanya dan formatnya. Parameter wajib metode broken_barh() adalah:

  • xranges – urutan tuple berformat (xmin, xwidth) untuk menandai awal dan rentang setiap batang. Di sini, setiap batang merepresentasikan sub-tugas. Jadi, parameter ini menampilkan tanggal mulai dan durasi setiap sub-tugas.
  • yrange – sebuah tuple berformat (ymin, yheight) untuk menandai posisi y dan tinggi setiap batang.

Sekarang, mari plot diagram Gantt "terputus" kita. Algoritmenya sebagai berikut:

  1. Buat figur dengan subplot.
  2. Iterasi baris-baris dataframe dan periksa apakah tugas memiliki satu, dua, atau tiga sub-tugas. Berdasarkan itu, lakukan hal berikut:
    • Satu sub-tugas: plot satu batang menggunakan metode barh() seperti sebelumnya.
    • Dua sub-tugas: plot dua batang menggunakan metode broken_barh().
    • Tiga sub-tugas: plot tiga batang menggunakan metode broken_barh().
  3. Tambahkan penyesuaian dasar: atur dan beri label tick sumbu-y.
# 1
fig, ax = plt.subplots()

# 2
for index, row in df2.iterrows():
    if row['start_2'] is None:
        ax.barh(y=df2['task'], width=df2['task_duration_1'], left=df2['days_to_start_1'])
    elif row['start_2'] is not None and row['start_3'] is None:
        ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1']), (row['days_to_start_2'], row['task_duration_2'])], yrange=(index + 1, 0.5))
    else:
        ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1']), (row['days_to_start_2'], row['task_duration_2']), (row['days_to_start_3'], row['task_duration_3'])], yrange=(index + 1, 0.5))

# 3
ax.set_yticks([1.25, 2.25, 3.25, 4.25])
ax.set_yticklabels(df2['task'])

plt.show()

Keluaran:

broken_barh() Gantt Chart

Dalam kode di atas, kita sebenarnya bisa menggunakan metode broken_barh() juga untuk plot batang pada tugas dengan hanya satu sub-tugas. Dalam kasus ini, kita perlu mengganti baris kode ini:

ax.barh(y=df2['task'], width=df2['task_duration_1'], left=df2['days_to_start_1'])

dengan yang ini:

ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1'])], yrange=(index + 1, 0.5))

Pendekatan ini juga akan membuat kode kita lebih seragam dan mudah dibaca.

Cara Menyesuaikan Diagram Gantt di Matplotlib

Mari kembali ke dataframe awal kita:

print(df)

Keluaran:

  task        team      start        end  completion_frac  days_to_start  \
0     A         R&D 2022-10-20 2022-10-31             1.00              0  
1     B  Accounting 2022-10-24 2022-10-28             1.00              4  
2     C       Sales 2022-10-26 2022-10-31             1.00              6  
3     D       Sales 2022-10-31 2022-11-08             1.00             11  
4     E          IT 2022-11-03 2022-11-09             1.00             14  
5     F         R&D 2022-11-07 2022-11-18             0.95             18  
6     G          IT 2022-11-10 2022-11-17             0.70             21  
7     H       Sales 2022-11-14 2022-11-22             0.35             25  
8     I  Accounting 2022-11-18 2022-11-23             0.10             29  
9     J  Accounting 2022-11-23 2022-12-01             0.00             34  
10    K       Sales 2022-11-28 2022-12-05             0.00             39  
11    L          IT 2022-11-30 2022-12-05             0.00             41  

    days_to_end  task_duration  completion_days 
0            11             12            12.00 
1             8              5             5.00 
2            11              6             6.00 
3            19              9             9.00 
4            20              7             7.00 
5            29             12            11.40 
6            28              8             5.60 
7            33              9             3.15 
8            34              6             0.60 
9            42              9             0.00 
10           46              8             0.00 
11           46              6             0.00 

dan diagram Gantt pertama kita:

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()

Keluaran:

Gantt Chart in Matplotlib

Secara khusus, kita ingin menambahkan beberapa kustomisasi pada chart ini agar lebih informatif.

Untuk menggali lebih dalam penyesuaian plot dengan matplotlib, pertimbangkan sumber berikut: Matplotlib Tutorial: Python Plotting dan Matplotlib Cheat Sheet: Plotting in Python.

Penyesuaian Dasar Diagram Gantt

Ini mencakup:

  • Menambahkan judul plot
  • Menyesuaikan dan mengustomisasi sumbu
  • Menambahkan grid

Menambahkan judul plot

Memiliki judul yang bermakna adalah keharusan untuk setiap plot, termasuk diagram Gantt. Misalkan proyek kita bernama Project X:

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.title('Project Management Schedule of Project X', fontsize=15)
plt.show()

Keluaran:

Gantt Chart Matplotlib Plot Title

Menyesuaikan dan mengustomisasi sumbu serta menambahkan grid

Pada langkah ini, kita akan membangun dari kode sebelumnya dan melakukan hal-hal berikut:

  1. Membuat figur dengan subplot agar bisa bekerja dengan objek ax.
  2. Membalik sumbu-y agar semua tugas berurutan secara kronologis dari atas ke bawah.
  3. Menentukan lokasi tick sumbu-x yang optimal.
    • Katakanlah kita ingin menempatkan tick sumbu-x setiap hari Senin, dengan mengingat bahwa Project X dimulai pada hari Kamis.
    • Kita memilih hanya tick mayor untuk menghindari plot menjadi berantakan.
  4. Menentukan label tick sumbu-x yang tepat dan formatnya yang sesuai.
    • Sekali lagi, kita mengingat bahwa Project X dimulai pada hari Kamis, dan kita perlu memberi label hanya pada hari Senin.
    • Karena Project X sepenuhnya terkait dengan tahun 2022, kita tidak perlu mencantumkan tahun untuk setiap tanggal.
    • Penting untuk memastikan jumlah tick sumbu-x sama dengan jumlah label tick sumbu-x.
  5. Tambahkan tick dan label tick sumbu-x.
  6. Tambahkan grid vertikal.
# 1
fig, ax = plt.subplots()

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'] + 1)
plt.title('Project Management Schedule of Project X', fontsize=15)

# 2
plt.gca().invert_yaxis()

# 3
xticks = np.arange(5, df['days_to_end'].max() + 2, 7)

# 4
xticklabels = pd.date_range(start=df['start'].min() + dt.timedelta(days=4), end=df['end'].max()).strftime("%d/%m")
# 5
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])

# 6
ax.xaxis.grid(True, alpha=0.5)

plt.show()

Keluaran:

Gantt Chart Custom Axis

Jika Anda butuh lebih banyak latihan Python untuk menulis dan membaca kode Python dengan mudah, kursus Intermediate Python kami adalah rujukan yang baik.

Mewarnai Tugas Berdasarkan Tim

Sekarang, mari beri kode warna pada setiap batang (yang mewakili tugas tertentu) sesuai dengan tim yang ditugaskan. Untuk tujuan ini, kita akan melakukan hal berikut:

  1. Buat dictionary dengan nama tim sebagai kunci dan warna dasar matplotlib sebagai nilainya.
  2. Buat figur dengan subplot.
  3. Iterasi baris-baris dataframe, buat batang untuk setiap baris dan tambahkan warna yang sesuai dengan tim.
  4. Tambahkan semua penyesuaian dasar yang kita terapkan sebelumnya.
# 1
team_colors = {'R&D': 'c', 'Accounting': 'm', 'Sales': 'y', 'IT': 'b'}

# 2
fig, ax = plt.subplots()

# 3
for index, row in df.iterrows():
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']])

# 4
plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)
plt.show()

Keluaran:

Gantt chart with tasks colored by team

Menambahkan Legenda

Satu hal yang kurang pada contoh diagram Gantt di atas adalah legenda yang menjelaskan warna mana terkait tim mana. Untuk memperbaikinya, mari buat patch – objek 2D matplotlib yang diisi dengan warna yang telah ditentukan. Kita akan menggunakan kelas matplotlib.patches.Patch untuk menghasilkan daftar patch, satu untuk setiap tim, dengan warna yang sesuai:

patches = []
for team in team_colors:
    patches.append(matplotlib.patches.Patch(color=team_colors[team]))

Sekarang, kita siap menambahkan legenda ke chart kita:

fig, ax = plt.subplots()
for index, row in df.iterrows():
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']])
plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)

# Adding a legend
ax.legend(handles=patches, labels=team_colors.keys(), fontsize=11)

plt.show()

Keluaran:

Gantt chart with a legend

Contoh diagram Gantt di atas terlihat jauh lebih informatif.

Anda akan menemukan lebih banyak teknik untuk meningkatkan estetika dan keterbacaan plot dalam kursus Improving Your Data Visualizations in Python.

Menambahkan Status Penyelesaian

Sejauh ini, kita belum menggunakan completion_days column yang kita hitung di awal tutorial ini. Sekarang kita akan menggunakannya untuk membuat diagram Gantt lebih informatif dengan menampilkan tahap penyelesaian setiap tugas.

Secara teknis, yang akan kita lakukan adalah menambahkan satu batang lagi di atas setiap batang yang sudah kita buat. Batang bawah akan merepresentasikan durasi keseluruhan setiap tugas dalam hari yang dialokasikan, sementara batang atas akan menunjukkan status penyelesaian tugas tersebut dalam hari yang dialokasikan. 

Untuk setiap tugas, kedua batang akan memiliki warna yang sama sesuai dengan tim terkait, tetapi batang bawah akan lebih terang daripada batang atas agar perbedaannya terlihat.

Dengan kata lain, jika sebuah tim berkinerja melebihi ekspektasi pada suatu tugas, kombinasi dua batang ini akan menunjukkan seolah-olah tim telah bekerja lebih banyak hari pada tugas tersebut daripada yang diharapkan (yang berarti tugas tersebut kemungkinan akan selesai sebelum tenggat waktu). 

Sebaliknya, jika sebuah tim berkinerja di bawah ekspektasi pada suatu tugas, kombinasi batang terkait akan menunjukkan seolah-olah tim bekerja lebih sedikit hari pada tugas tersebut daripada yang diharapkan (yang berarti tugas tersebut kemungkinan akan selesai setelah tenggat waktu).

fig, ax = plt.subplots()

for index, row in df.iterrows():

    # Adding a lower bar - for the overall task duration
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']], alpha=0.4)

    # Adding an upper bar - for the status of completion
    plt.barh(y=row['task'], width=row['completion_days'], left=row['days_to_start'] + 1, color=team_colors[row['team']])

plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)
ax.legend(handles=patches, labels=team_colors.keys(), fontsize=11)
plt.show()

Keluaran:

Gantt chart with the status of completion

Dari plot di atas, kita dapat melihat bahwa tim-tim tidak melaju dengan kecepatan yang sama dalam menyelesaikan tugasnya, yang merupakan situasi umum pada banyak proyek nyata. Untuk mendapatkan lebih banyak informasi dari plot ini, mari anggap bahwa tanggal saat ini adalah 17 November 2022 dan tandai tanggal ini pada chart kita:

fig, ax = plt.subplots()
for index, row in df.iterrows():
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']], alpha=0.4)
    plt.barh(y=row['task'], width=row['completion_days'], left=row['days_to_start'] + 1, color=team_colors[row['team']])

plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)
ax.legend(handles=patches, labels=team_colors.keys(), fontsize=11)

# Marking the current date on the chart
ax.axvline(x=29, color='r', linestyle='dashed')
ax.text(x=29.5, y=11.5, s='17/11', color='r')

plt.show()

Keluaran:

Gantt chart with the current date

Kita dapat membuat pengamatan berikut tentang status Project X saat ini:

  • Tim R&D berkinerja melebihi ekspektasi pada Tugas F dan kemungkinan akan menyelesaikannya sebelum tenggat waktu.
  • Tim IT mengalami keterlambatan pada Tugas G dan mungkin membutuhkan dukungan.
  • Tim Sales bekerja sesuai jadwal pada Tugas H.
  • Tim Accounting memulai Tugas I lebih awal dari jadwal proyek.

Pengamatan seperti ini dapat membantu para pemimpin tim dan manajer proyek menyesuaikan jadwal proyek dan mengalokasikan sumber daya yang diperlukan tepat waktu untuk menghindari keterlambatan pada deliverable proyek.

Penyesuaian Lain yang Mungkin

Kita dapat menambahkan lebih banyak detail pada diagram Gantt matplotlib kita. Misalnya:

  • Tambahkan persentase penyelesaian tugas pada setiap batang.
  • Bagi beberapa tugas menjadi sub-tugas (kita sudah membahas cara melakukannya secara teknis sebelumnya di tutorial ini).
  • Anotasi tugas-tugas yang berkorelasi.
  • Tandai tonggak dan tenggat penting.
  • Sorot akhir pekan dan hari libur.
  • Urutkan batang berdasarkan tim atau jenis tugas.
  • Tambahkan tick minor pada sumbu-x untuk meningkatkan granularitas informasi.
  • Perbaiki pemformatan dan tata letak plot secara keseluruhan.

Namun, penting untuk menjaga diagram Gantt tetap bersih dan menghindari penumpukan terlalu banyak detail. Seperti jenis visualisasi data lainnya, kita perlu menjaga keseimbangan antara kapasitas informasi plot dan keterbacaannya, serta keterbacaan kode yang digunakan untuk membangun plot tersebut.

Mulai Membuat Diagram Gantt Anda Sendiri di Python dengan Matplotlib

Singkatnya, dalam tutorial ini, kita mengeksplorasi:

  • apa itu diagram Gantt
  • jenis informasi apa yang ditampilkannya
  • kapan digunakan
  • berbagai cara dan nuansa membuat diagram Gantt dengan matplotlib
  • cara membuat diagram Gantt di Python dengan matplotlib 
  • cara menyesuaikannya lebih lanjut agar lebih informatif
  • cara menafsirkan hasil akhirnya. 

Selain itu, kita melihat berbagai contoh diagram Gantt dan proses langkah demi langkah untuk membangunnya.

Untuk pendekatan yang lebih terpadu dalam mempelajari cara membuat chart yang menarik dan informatif di Python, lihat Data Visualization with Python skill track kami.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

Tutorial Korelasi di R