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.
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 dtDidukung oleh
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)Didukung oleh
Keluaran:
task team start end completion_frac
0 A R&D 2022-10-202022-10-311.001 B Accounting 2022-10-242022-10-281.002 C Sales 2022-10-262022-10-311.003 D Sales 2022-10-312022-11-081.004 E IT 2022-11-032022-11-091.005 F R&D 2022-11-072022-11-180.956 G IT 2022-11-102022-11-170.707 H Sales 2022-11-142022-11-220.358 I Accounting 2022-11-182022-11-230.109 J Accounting 2022-11-232022-12-010.0010 K Sales 2022-11-282022-12-050.0011 L IT 2022-11-302022-12-050.00Didukung oleh
Untuk memudahkan pembuatan diagram Gantt untuk data ini, kita perlu menghitung empat kolom lagi yang akan merepresentasikan informasi berikut:
Berapa hari yang telah/akan berlalu sejak awal proyek hingga tanggal mulai setiap tugas:
df['days_to_start']=(df['start']- df['start'].min()).dt.daysDidukung oleh
Berapa hari yang telah/akan berlalu sejak awal proyek hingga tanggal selesai setiap tugas:
df['days_to_end']=(df['end']- df['start'].min()).dt.daysDidukung oleh
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 dateDidukung oleh
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']Didukung oleh
task team start end completion_frac days_to_start \
0 A R&D 2022-10-202022-10-311.0001 B Accounting 2022-10-242022-10-281.0042 C Sales 2022-10-262022-10-311.0063 D Sales 2022-10-312022-11-081.00114 E IT 2022-11-032022-11-091.00145 F R&D 2022-11-072022-11-180.95186 G IT 2022-11-102022-11-170.70217 H Sales 2022-11-142022-11-220.35258 I Accounting 2022-11-182022-11-230.10299 J Accounting 2022-11-232022-12-010.003410 K Sales 2022-11-282022-12-050.003911 L IT 2022-11-302022-12-050.0041
days_to_end task_duration completion_days
0111212.001855.0021166.0031999.0042077.005291211.4062885.6073393.1583460.6094290.00104680.00114660.00Didukung oleh
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()Didukung oleh
Keluaran:
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:
Ambil dari dataframe awal kita hanya tugas-tugas yang ditugaskan ke tim Sales (untuk saat ini, abaikan kolom completion_frac).
Ubah nama kolom start dan end menjadi start_1 dan end_1 masing-masing (demi kemudahan).
Tambahkan lebih banyak sub-tugas ke beberapa tugas yang ada.
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])# 4for 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]+1print(df2)Didukung oleh
Keluaran:
task team start_1 end_1 start_2 end_2 start_3 \
0 C Sales 2022-10-262022-10-31 NaT NaT NaT
1 D Sales 2022-10-312022-11-082022-11-102022-11-14 NaT
2 H Sales 2022-11-142022-11-222022-11-252022-11-282022-12-013 K Sales 2022-11-282022-12-05 NaT NaT NaT
end_3 days_to_start_1 days_to_end_1 task_duration_1 \
0 NaT 0561 NaT 513922022-12-05192793 NaT 33408
days_to_start_2 days_to_end_2 task_duration_2 days_to_start_3 \
0 NaN NaN NaN NaN
115.019.05.0 NaN
230.033.04.036.03 NaN NaN NaN NaN
days_to_end_3 task_duration_3
0 NaN NaN
1 NaN NaN
240.05.03 NaN NaN Didukung oleh
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:
Buat figur dengan subplot.
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().
Tambahkan penyesuaian dasar: atur dan beri label tick sumbu-y.
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'])Didukung oleh
dengan yang ini:
ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1'])], yrange=(index +1,0.5))Didukung oleh
Pendekatan ini juga akan membuat kode kita lebih seragam dan mudah dibaca.
task team start end completion_frac days_to_start \
0 A R&D 2022-10-202022-10-311.0001 B Accounting 2022-10-242022-10-281.0042 C Sales 2022-10-262022-10-311.0063 D Sales 2022-10-312022-11-081.00114 E IT 2022-11-032022-11-091.00145 F R&D 2022-11-072022-11-180.95186 G IT 2022-11-102022-11-170.70217 H Sales 2022-11-142022-11-220.35258 I Accounting 2022-11-182022-11-230.10299 J Accounting 2022-11-232022-12-010.003410 K Sales 2022-11-282022-12-050.003911 L IT 2022-11-302022-12-050.0041
days_to_end task_duration completion_days
0111212.001855.0021166.0031999.0042077.005291211.4062885.6073393.1583460.6094290.00104680.00114660.00Didukung oleh
dan diagram Gantt pertama kita:
plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()Didukung oleh
Keluaran:
Secara khusus, kita ingin menambahkan beberapa kustomisasi pada chart ini agar lebih informatif.
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:
Buat dictionary dengan nama tim sebagai kunci dan warna dasar matplotlib sebagai nilainya.
Buat figur dengan subplot.
Iterasi baris-baris dataframe, buat batang untuk setiap baris dan tambahkan warna yang sesuai dengan tim.
Tambahkan semua penyesuaian dasar yang kita terapkan sebelumnya.
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]))Didukung oleh
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()Didukung oleh
Keluaran:
Contoh diagram Gantt di atas terlihat jauh lebih informatif.
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()Didukung oleh
Keluaran:
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()Didukung oleh
Keluaran:
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.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
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()darimatplotlib.pyplot.Pertama, kita perlu mengunduh pustaka yang diperlukan:
Langkah berikutnya adalah membuat data dummy untuk dikerjakan:
Keluaran:
Untuk memudahkan pembuatan diagram Gantt untuk data ini, kita perlu menghitung empat kolom lagi yang akan merepresentasikan informasi berikut:
Mari periksa apa yang kita peroleh:
Keluaran:
Sekarang, kita siap menghasilkan diagram Gantt dasar di matplotlib:
Keluaran:
Plot di atas memerlukan beberapa penyesuaian agar kita bisa mendapatkan informasi maksimal darinya:
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:
completion_frac).startdanendmenjadistart_1danend_1masing-masing (demi kemudahan).Keluaran:
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 dibandingkanbarh(), mari lihat parameter utamanya dan formatnya. Parameter wajib metodebroken_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:
barh()seperti sebelumnya.broken_barh().broken_barh().Keluaran:
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:dengan yang ini:
Pendekatan ini juga akan membuat kode kita lebih seragam dan mudah dibaca.
Cara Menyesuaikan Diagram Gantt di Matplotlib
Mari kembali ke dataframe awal kita:
Keluaran:
dan diagram Gantt pertama kita:
Keluaran:
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
Memiliki judul yang bermakna adalah keharusan untuk setiap plot, termasuk diagram Gantt. Misalkan proyek kita bernama Project X:
Keluaran:
Menyesuaikan dan mengustomisasi sumbu serta menambahkan grid
Pada langkah ini, kita akan membangun dari kode sebelumnya dan melakukan hal-hal berikut:
ax.Keluaran:
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:
Keluaran:
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:
Sekarang, kita siap menambahkan legenda ke chart kita:
Keluaran:
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 columnyang 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).
Keluaran:
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:
Keluaran:
Kita dapat membuat pengamatan berikut tentang status Project X saat ini:
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:
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:
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.