इस चरण-दर-चरण मार्गदर्शिका में, हम समझेंगे कि Gantt चार्ट क्या है, ऐसी विज़ुअलाइज़ेशन क्यों और कब उपयोगी होती हैं, matplotlib के साथ Python में Gantt चार्ट कैसे बनाया जाता है, और इसे आगे कैसे कस्टमाइज़ किया जा सकता है। इसी दौरान, हम matplotlib में कुछ Gantt चार्ट के उदाहरण भी बनाएंगे।
Gantt चार्ट क्या है और यह क्यों उपयोगी है?
Gantt चार्ट बार प्लॉट का एक प्रकार है जिसका उपयोग संपूर्ण प्रोजेक्ट की योजना और प्रबंधन अनुसूची को दर्शाने के लिए किया जाता है। इसमें आम तौर पर प्रोजेक्ट टास्क के नाम, उनके आरंभ और समाप्ति तिथियां, जिन टीमों को वे टास्क सौंपे गए हैं, टास्क पूर्णता की स्थिति (प्रतिशत या भिन्न में), टीम के आधार पर प्रदर्शन, और प्रोजेक्ट के महत्वपूर्ण माइलस्टोन जैसी विशेषताएं दिखाई जाती हैं।
Gantt चार्ट के y-अक्ष पर टास्क के नाम व्यवस्थित होते हैं, जिन्हें आमतौर पर ऊपर से नीचे कालानुक्रमिक क्रम में उनकी आरंभ तिथियों के अनुसार सॉर्ट किया जाता है। इसके विपरीत, x-अक्ष समय अवधि दिखाने का काम करता है, जहां प्रत्येक बार की चौड़ाई उस टास्क के क्रियान्वयन की अवधि के अनुरूप होती है।
चूंकि Gantt चार्ट मूलतः एक क्षैतिज बार प्लॉट का विशेष रूप है, हम इसे Python की कई डेटा विज़ुअलाइज़ेशन लाइब्रेरीज़ में बना सकते हैं, जिनमें matplotlib, Plotly, Bokeh, और Altair शामिल हैं। इस ट्यूटोरियल में, हम सबसे लोकप्रिय लाइब्रेरी – matplotlib – में Gantt चार्ट बनाने पर ध्यान देंगे।
Matplotlib के साथ Python में Gantt चार्ट कैसे बनाएं
barh() का उपयोग करना
आइए matplotlib.pyplot की barh() मेथड का उपयोग करके एक बुनियादी matplotlib Gantt चार्ट बनाकर शुरू करें।
पहले, हमें आवश्यक लाइब्रेरीज़ डाउनलोड करनी होंगी:
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import datetime as dtसंचालित द्वारा
अगला कदम काम करने के लिए डमी डेटा बनाना है:
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)संचालित द्वारा
आउटपुट:
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.00संचालित द्वारा
इस डेटा के लिए Gantt चार्ट बनाना आसान करने हेतु, हमें चार और कॉलम निकालने होंगे जो निम्नलिखित जानकारी का प्रतिनिधित्व करेंगे:
कुल प्रोजेक्ट शुरू होने से प्रत्येक टास्क की आरंभ तिथि तक कितने दिन बीते/बीतेंगे:
df['days_to_start']=(df['start']- df['start'].min()).dt.daysसंचालित द्वारा
कुल प्रोजेक्ट शुरू होने से प्रत्येक टास्क की समाप्ति तिथि तक कितने दिन बीते/बीतेंगे:
df['days_to_end']=(df['end']- df['start'].min()).dt.daysसंचालित द्वारा
आरंभ और समाप्ति तिथियों दोनों सहित प्रत्येक टास्क की अवधि:
df['task_duration']= df['days_to_end']- df['days_to_start']+1# to include also the end dateसंचालित द्वारा
प्रत्येक टास्क की पूर्णता स्थिति को भिन्न से उक्त टास्क को आवंटित दिनों के हिस्से में परिवर्तित करना:
df['completion_days']= df['completion_frac']* df['task_duration']संचालित द्वारा
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.00संचालित द्वारा
अब, हम matplotlib में एक बुनियादी Gantt चार्ट बनाने के लिए तैयार हैं:
plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()संचालित द्वारा
आउटपुट:
उपरोक्त प्लॉट को अधिकतम जानकारी निकालने योग्य बनाने के लिए हमें इसमें कुछ समायोजन करने होंगे:
अर्थपूर्ण शीर्षक और x-लेबल (तिथियां) जोड़ना
y-अक्ष को उलटना ताकि सभी टास्क ऊपर से नीचे कालानुक्रमिक क्रम में हों
ग्रिड जोड़ना
टीम के अनुसार टास्क को रंगना
लीजेंड दिखाना
टास्क पूर्णता की स्थिति जोड़ना
हम जल्द ही ये सभी परिशोधन लागू करेंगे। हालांकि, उससे पहले यह देखें कि बुनियादी Gantt चार्ट बनाते समय कैसे निपटें।
broken_barh() का उपयोग करना
जब कुछ टास्क में समय अवधि में फैले दो या अधिक सबटास्क होते हैं, तो हमें एक और matplotlib मेथड – broken_barh() – का उपयोग करना चाहिए।
इस तरीके को आज़माने के लिए कुछ डमी डेटा पाने हेतु, आइए निम्न करें:
हमारे शुरुआती डेटाफ़्रेम से केवल वे टास्क लें जो Sales टीम को सौंपे गए थे (अभी के लिए, completion_frac कॉलम को नज़रअंदाज़ करें)।
start और end कॉलम का नाम क्रमशः start_1 और end_1 कर दें (सुविधा के लिए)।
उपलब्ध कुछ टास्क में और सबटास्क जोड़ें।
प्रत्येक सबटास्क के लिए, ऊपर दिखाए गए अनुसार तीन कॉलम की गणना करें जो निम्नलिखित जानकारी दर्शाएं:
कुल प्रोजेक्ट शुरू होने से प्रत्येक सबटास्क की आरंभ तिथि तक कितने दिन बीते/बीतेंगे।
कुल प्रोजेक्ट शुरू होने से प्रत्येक सबटास्क की समाप्ति तिथि तक कितने दिन बीते/बीतेंगे।
आरंभ और समाप्ति तिथियों दोनों सहित प्रत्येक सबटास्क की अवधि।
# 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)संचालित द्वारा
आउटपुट:
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 संचालित द्वारा
ध्यान दें कि अब टास्क D के दो सबटास्क हैं, टास्क H के तीन सबटास्क हैं, और टास्क C तथा K में एक-एक सबटास्क है। अतः, broken_barh() मेथड हम टास्क D और H पर लागू करेंगे। चूंकि इस मेथड का सिंटैक्स barh() से थोड़ा कम सहज है, आइए इसके मुख्य पैरामीटर और उनके फ़ॉर्मेट पर नज़र डालें। broken_barh() के अनिवार्य पैरामीटर हैं:
xranges – ट्यूपल्स का अनुक्रम, फ़ॉर्मेट (xmin, xwidth) में, जो प्रत्येक बार की शुरुआत और उसकी चौड़ाई को दर्शाता है। यहां हर बार एक सबटास्क है। इसलिए यह पैरामीटर प्रत्येक सबटास्क की आरंभ तिथि और अवधि दर्शाता है।
yrange – ट्यूपल फ़ॉर्मेट (ymin, yheight) में, जो प्रत्येक बार की y-पोज़िशन और ऊंचाई बताता है।
अब, अपना "टूटा हुआ" Gantt चार्ट प्लॉट करें। एल्गोरिथ्म इस प्रकार है:
सबप्लॉट्स के साथ एक फ़िगर बनाएँ।
डेटाफ़्रेम की पंक्तियों पर इटररेट करें और जांचें कि टास्क में एक, दो, या तीन सबटास्क हैं। उसके आधार पर निम्न करें:
एक सबटास्क: पहले की तरह barh() मेथड से एक बार प्लॉट करें।
दो सबटास्क: broken_barh() मेथड से दो बार प्लॉट करें।
तीन सबटास्क: broken_barh() मेथड से तीन बार प्लॉट करें।
बुनियादी समायोजन जोड़ें: y-अक्ष के टिक्स सेट करें और लेबल करें।
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.00संचालित द्वारा
और अपने पहले Gantt चार्ट पर:
plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()संचालित द्वारा
आउटपुट:
विशेष रूप से, हम इस चार्ट में कुछ कस्टमाइज़ेशन जोड़ना चाहते हैं ताकि यह अधिक सूचनाप्रद हो।
यदि आपको Python का अभ्यास चाहिए ताकि आप कोई भी Python कोड आसानी से लिख और पढ़ सकें, हमारा Intermediate Python कोर्स एक अच्छा संदर्भ है।
टीम के अनुसार टास्क को रंगना
अब, प्रत्येक बार (जो किसी विशिष्ट टास्क का प्रतिनिधित्व करता है) को उस टीम के अनुरूप रंग-कोड करें जिसे यह टास्क सौंपा गया था। इसके लिए, हम निम्न करेंगे:
टीम नामों को कुंजी और बेस matplotlib रंगों को मान के रूप में लेकर एक डिक्शनरी बनाएं।
सबप्लॉट्स सहित एक फ़िगर बनाएं।
डेटाफ़्रेम की पंक्तियों पर इटररेट करें, प्रत्येक पंक्ति के लिए एक बार बनाएं और टीम के अनुरूप रंग जोड़ें।
वे सभी बुनियादी समायोजन जोड़ें जो हमने पहले लागू किए थे।
ऊपर दिए गए Gantt चार्ट उदाहरण में एक चीज़ की कमी है – कौन-सा रंग किस टीम से संबंधित है, यह बताने वाला लीजेंड। इसे ठीक करने के लिए, हम पैचेस बनाएंगे – पूर्व-परिभाषित रंग से भरे matplotlib 2D आर्टिस्ट ऑब्जेक्ट। हम matplotlib.patches.Patch क्लास का उपयोग करके प्रत्येक टीम के लिए, उपयुक्त रंग में, पैचेस की सूची बनाएंगे:
patches =[]for team in team_colors:
patches.append(matplotlib.patches.Patch(color=team_colors[team]))संचालित द्वारा
अब, हम अपने चार्ट में लीजेंड जोड़ने के लिए तैयार हैं:
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()संचालित द्वारा
आउटपुट:
उपरोक्त Gantt चार्ट उदाहरण अब कहीं अधिक जानकारीपूर्ण दिखता है।
अब तक, हमने उस completion_days column का उपयोग नहीं किया है जिसे हमने इस ट्यूटोरियल की शुरुआत में निकाला था। अब हम इसे उपयोग करेंगे ताकि अपने Gantt चार्ट को अधिक सूचनाप्रद बना सकें और दिखा सकें कि प्रत्येक टास्क किस चरण में है।
तकनीकी रूप से, हम पहले से बने प्रत्येक बार के ऊपर एक और बार जोड़ेंगे। निचला बार प्रत्येक टास्क की कुल अवधि (आवंटित दिनों में) को दर्शाएगा, जबकि ऊपर वाला उसी टास्क की पूर्णता स्थिति (आवंटित दिनों में) को दिखाएगा।
प्रत्येक टास्क के लिए, दोनों बार संबंधित टीम के समान रंग के होंगे, लेकिन निचला बार ऊपरी बार से हल्का होगा ताकि उनके बीच का अंतर दिख सके।
दूसरे शब्दों में, यदि कोई टीम किसी टास्क पर बेहतर प्रदर्शन कर रही है, तो इन दो बार का संयोजन यह दर्शाएगा मानो टीम ने उस टास्क पर अपेक्षा से अधिक दिन काम कर लिया है (अर्थात संभवतः टास्क समय सीमा से पहले पूरा हो जाएगा)।
विपरीत स्थिति में, यदि कोई टीम किसी टास्क पर कम प्रदर्शन कर रही है, तो संबंधित बार यह दिखाएंगे मानो टीम ने उस टास्क पर अपेक्षा से कम दिन काम किया है (अर्थात टास्क संभवतः समय सीमा के बाद पूरा होगा)।
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()संचालित द्वारा
आउटपुट:
ऊपर दिए गए प्लॉट से दिखता है कि टीमें अपने टास्क पूरे करने में एक-सी गति से नहीं चल रहीं, जो कई वास्तविक प्रोजेक्ट्स में सामान्य है। इस प्लॉट से और जानकारी पाने के लिए, मान लें कि वर्तमान तारीख 17 नवंबर 2022 है और इस तारीख को अपने चार्ट पर चिह्नित करें:
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()संचालित द्वारा
आउटपुट:
Project X की वर्तमान स्थिति के बारे में हम निम्न टिप्पणियां कर सकते हैं:
R&D टीम टास्क F पर बेहतर प्रदर्शन कर रही है और संभवतः इसे समय सीमा से पहले पूरा कर लेगी।
IT टीम टास्क G में विलंब में है और शायद उसे कुछ सहायता की आवश्यकता है।
Sales टीम टास्क H पर अनुसूची के अनुसार काम कर रही है।
Accounting टीम ने टास्क I को प्रोजेक्ट अनुसूची से पहले शुरू किया।
ऐसी टिप्पणियां टीम लीडर्स और प्रोजेक्ट मैनेजर को प्रोजेक्ट अनुसूची को समायोजित करने और आवश्यक संसाधन समय पर आवंटित करने में मदद कर सकती हैं ताकि डिलीवेरेबल्स में देरी से बचा जा सके।
अन्य संभावित समायोजन
हम अपने matplotlib Gantt चार्ट में और विवरण जोड़ सकते हैं। उदाहरण के लिए:
प्रत्येक बार पर टास्क पूर्णता का प्रतिशत जोड़ना।
कुछ टास्क को सबटास्क में विभाजित करना (तकनीकी तौर पर इसे कैसे करना है, हम पहले चर्चा कर चुके हैं)।
संबद्ध टास्क को एनोटेट करना।
महत्वपूर्ण माइलस्टोन और डेडलाइन चिह्नित करना।
वीकेंड और छुट्टियां हाईलाइट करना।
बार्स को टीम या टास्क प्रकार के आधार पर सॉर्ट करना।
x-अक्ष पर माइनर टिक्स जोड़ना ताकि सूचना की सूक्ष्मता बढ़े।
प्लॉट के समग्र फ़ॉर्मैटिंग और लेआउट में सुधार करना।
हालांकि, यह महत्वपूर्ण है कि हम अपने Gantt चार्ट को साफ-सुथरा रखें और उसे बहुत अधिक विवरणों से अव्यवस्थित न करें। अन्य किसी भी डेटा विज़ुअलाइज़ेशन की तरह, हमें प्लॉट की सूचना क्षमता और उसकी पठनीयता के बीच, साथ ही उस प्लॉट को बनाने के लिए उपयोग किए गए कोड की पठनीयता के बीच आवश्यक संतुलन बनाए रखना होता है।
Matplotlib के साथ Python में अपना Gantt चार्ट बनाना शुरू करें
सारांश के रूप में, इस ट्यूटोरियल में, हमने देखा:
Gantt चार्ट क्या होता है
यह किस प्रकार की जानकारी दिखाता है
इसे कब इस्तेमाल किया जाता है
matplotlib के साथ Gantt चार्ट बनाने के अलग-अलग तरीके और बारीकियां
matplotlib के साथ Python में Gantt चार्ट कैसे बनाया जाए
इसे और अधिक सूचनाप्रद बनाने के लिए आगे कैसे समायोजित किया जाए
अंतिम परिणाम की व्याख्या कैसे करें।
इसके अलावा, हमने विभिन्न Gantt चार्ट उदाहरण और उन्हें बनाने की चरण-दर-चरण प्रक्रिया भी देखी।
Python में प्रभावशाली और जानकारीपूर्ण चार्ट बनाना सीखने के लिए एक अधिक एकीकृत दृष्टिकोण हेतु, हमारा Data Visualization with Python स्किल ट्रैक देखें।
इस चरण-दर-चरण मार्गदर्शिका में, हम समझेंगे कि Gantt चार्ट क्या है, ऐसी विज़ुअलाइज़ेशन क्यों और कब उपयोगी होती हैं, matplotlib के साथ Python में Gantt चार्ट कैसे बनाया जाता है, और इसे आगे कैसे कस्टमाइज़ किया जा सकता है। इसी दौरान, हम matplotlib में कुछ Gantt चार्ट के उदाहरण भी बनाएंगे।
Gantt चार्ट क्या है और यह क्यों उपयोगी है?
Gantt चार्ट बार प्लॉट का एक प्रकार है जिसका उपयोग संपूर्ण प्रोजेक्ट की योजना और प्रबंधन अनुसूची को दर्शाने के लिए किया जाता है। इसमें आम तौर पर प्रोजेक्ट टास्क के नाम, उनके आरंभ और समाप्ति तिथियां, जिन टीमों को वे टास्क सौंपे गए हैं, टास्क पूर्णता की स्थिति (प्रतिशत या भिन्न में), टीम के आधार पर प्रदर्शन, और प्रोजेक्ट के महत्वपूर्ण माइलस्टोन जैसी विशेषताएं दिखाई जाती हैं।
Gantt चार्ट के y-अक्ष पर टास्क के नाम व्यवस्थित होते हैं, जिन्हें आमतौर पर ऊपर से नीचे कालानुक्रमिक क्रम में उनकी आरंभ तिथियों के अनुसार सॉर्ट किया जाता है। इसके विपरीत, x-अक्ष समय अवधि दिखाने का काम करता है, जहां प्रत्येक बार की चौड़ाई उस टास्क के क्रियान्वयन की अवधि के अनुरूप होती है।
चूंकि Gantt चार्ट मूलतः एक क्षैतिज बार प्लॉट का विशेष रूप है, हम इसे Python की कई डेटा विज़ुअलाइज़ेशन लाइब्रेरीज़ में बना सकते हैं, जिनमें matplotlib, Plotly, Bokeh, और Altair शामिल हैं। इस ट्यूटोरियल में, हम सबसे लोकप्रिय लाइब्रेरी – matplotlib – में Gantt चार्ट बनाने पर ध्यान देंगे।
यदि आप Python में Gantt चार्ट और अन्य प्रकार के प्लॉट बनाने के वैकल्पिक तरीके आज़माना चाहते हैं, तो Introduction to Data Visualization with Plotly in Python कोर्स देखें। अगर आपको matplotlib कौशल को ताज़ा या विकसित करना है, तो ये कोर्स उपयोगी रहेंगे: Introduction to Data Visualization with Matplotlib और Python for MATLAB Users।
Matplotlib के साथ Python में Gantt चार्ट कैसे बनाएं
barh() का उपयोग करना
आइए
matplotlib.pyplotकीbarh()मेथड का उपयोग करके एक बुनियादी matplotlib Gantt चार्ट बनाकर शुरू करें।पहले, हमें आवश्यक लाइब्रेरीज़ डाउनलोड करनी होंगी:
अगला कदम काम करने के लिए डमी डेटा बनाना है:
आउटपुट:
इस डेटा के लिए Gantt चार्ट बनाना आसान करने हेतु, हमें चार और कॉलम निकालने होंगे जो निम्नलिखित जानकारी का प्रतिनिधित्व करेंगे:
आइए देखें कि हमें क्या मिला:
आउटपुट:
अब, हम matplotlib में एक बुनियादी Gantt चार्ट बनाने के लिए तैयार हैं:
आउटपुट:
उपरोक्त प्लॉट को अधिकतम जानकारी निकालने योग्य बनाने के लिए हमें इसमें कुछ समायोजन करने होंगे:
हम जल्द ही ये सभी परिशोधन लागू करेंगे। हालांकि, उससे पहले यह देखें कि बुनियादी Gantt चार्ट बनाते समय कैसे निपटें।
broken_barh()का उपयोग करनाजब कुछ टास्क में समय अवधि में फैले दो या अधिक सबटास्क होते हैं, तो हमें एक और matplotlib मेथड –
broken_barh()– का उपयोग करना चाहिए।इस तरीके को आज़माने के लिए कुछ डमी डेटा पाने हेतु, आइए निम्न करें:
completion_fracकॉलम को नज़रअंदाज़ करें)।startऔरendकॉलम का नाम क्रमशःstart_1औरend_1कर दें (सुविधा के लिए)।आउटपुट:
ध्यान दें कि अब टास्क D के दो सबटास्क हैं, टास्क H के तीन सबटास्क हैं, और टास्क C तथा K में एक-एक सबटास्क है। अतः,
broken_barh()मेथड हम टास्क D और H पर लागू करेंगे। चूंकि इस मेथड का सिंटैक्सbarh()से थोड़ा कम सहज है, आइए इसके मुख्य पैरामीटर और उनके फ़ॉर्मेट पर नज़र डालें।broken_barh()के अनिवार्य पैरामीटर हैं:xranges– ट्यूपल्स का अनुक्रम, फ़ॉर्मेट (xmin,xwidth) में, जो प्रत्येक बार की शुरुआत और उसकी चौड़ाई को दर्शाता है। यहां हर बार एक सबटास्क है। इसलिए यह पैरामीटर प्रत्येक सबटास्क की आरंभ तिथि और अवधि दर्शाता है।yrange– ट्यूपल फ़ॉर्मेट (ymin,yheight) में, जो प्रत्येक बार की y-पोज़िशन और ऊंचाई बताता है।अब, अपना "टूटा हुआ" Gantt चार्ट प्लॉट करें। एल्गोरिथ्म इस प्रकार है:
barh()मेथड से एक बार प्लॉट करें।broken_barh()मेथड से दो बार प्लॉट करें।broken_barh()मेथड से तीन बार प्लॉट करें।आउटपुट:
उपरोक्त कोड में, हम वास्तव में केवल एक सबटास्क वाले टास्क के लिए भी
broken_barh()का उपयोग कर सकते हैं। इस स्थिति में, हमें इस कोड लाइन को:इससे बदलना होगा:
यह तरीका हमारे कोड को अधिक एकरूप और पठनीय भी बनाएगा।
Matplotlib में Gantt चार्ट को कैसे कस्टमाइज़ करें
आइए अपने शुरुआती डेटाफ़्रेम पर लौटें:
आउटपुट:
और अपने पहले Gantt चार्ट पर:
आउटपुट:
विशेष रूप से, हम इस चार्ट में कुछ कस्टमाइज़ेशन जोड़ना चाहते हैं ताकि यह अधिक सूचनाप्रद हो।
matplotlib के साथ प्लॉट कस्टमाइज़िंग में और गहराई से जाने के लिए, ये संसाधन देखें: Matplotlib Tutorial: Python Plotting और Matplotlib Cheat Sheet: Plotting in Python।
बुनियादी Gantt चार्ट समायोजन
इनमें शामिल हैं:
प्लॉट शीर्षक जोड़ना
एक अर्थपूर्ण शीर्षक किसी भी प्लॉट, जिसमें Gantt चार्ट भी शामिल है, के लिए आवश्यक है। मान लें कि हमारा प्रोजेक्ट Project X कहलाता है:
आउटपुट:
अक्षों को समायोजित और कस्टमाइज़ करना तथा ग्रिड जोड़ना
इस चरण में, हम पिछले कोड पर आगे बढ़ेंगे और निम्न कार्य करेंगे:
axऑब्जेक्ट के साथ काम करने के लिए सबप्लॉट्स सहित एक फ़िगर बनाएं।आउटपुट:
यदि आपको Python का अभ्यास चाहिए ताकि आप कोई भी Python कोड आसानी से लिख और पढ़ सकें, हमारा Intermediate Python कोर्स एक अच्छा संदर्भ है।
टीम के अनुसार टास्क को रंगना
अब, प्रत्येक बार (जो किसी विशिष्ट टास्क का प्रतिनिधित्व करता है) को उस टीम के अनुरूप रंग-कोड करें जिसे यह टास्क सौंपा गया था। इसके लिए, हम निम्न करेंगे:
आउटपुट:
लीजेंड जोड़ना
ऊपर दिए गए Gantt चार्ट उदाहरण में एक चीज़ की कमी है – कौन-सा रंग किस टीम से संबंधित है, यह बताने वाला लीजेंड। इसे ठीक करने के लिए, हम पैचेस बनाएंगे – पूर्व-परिभाषित रंग से भरे matplotlib 2D आर्टिस्ट ऑब्जेक्ट। हम matplotlib.patches.Patch क्लास का उपयोग करके प्रत्येक टीम के लिए, उपयुक्त रंग में, पैचेस की सूची बनाएंगे:
अब, हम अपने चार्ट में लीजेंड जोड़ने के लिए तैयार हैं:
आउटपुट:
उपरोक्त Gantt चार्ट उदाहरण अब कहीं अधिक जानकारीपूर्ण दिखता है।
Python में अपनी प्लॉट की सौंदर्यशास्त्र और पठनीयता को बेहतर बनाने की और तकनीकें आप Improving Your Data Visualizations in Python कोर्स में पाएंगे।
पूर्णता की स्थिति जोड़ना
अब तक, हमने उस
completion_days columnका उपयोग नहीं किया है जिसे हमने इस ट्यूटोरियल की शुरुआत में निकाला था। अब हम इसे उपयोग करेंगे ताकि अपने Gantt चार्ट को अधिक सूचनाप्रद बना सकें और दिखा सकें कि प्रत्येक टास्क किस चरण में है।तकनीकी रूप से, हम पहले से बने प्रत्येक बार के ऊपर एक और बार जोड़ेंगे। निचला बार प्रत्येक टास्क की कुल अवधि (आवंटित दिनों में) को दर्शाएगा, जबकि ऊपर वाला उसी टास्क की पूर्णता स्थिति (आवंटित दिनों में) को दिखाएगा।
प्रत्येक टास्क के लिए, दोनों बार संबंधित टीम के समान रंग के होंगे, लेकिन निचला बार ऊपरी बार से हल्का होगा ताकि उनके बीच का अंतर दिख सके।
दूसरे शब्दों में, यदि कोई टीम किसी टास्क पर बेहतर प्रदर्शन कर रही है, तो इन दो बार का संयोजन यह दर्शाएगा मानो टीम ने उस टास्क पर अपेक्षा से अधिक दिन काम कर लिया है (अर्थात संभवतः टास्क समय सीमा से पहले पूरा हो जाएगा)।
विपरीत स्थिति में, यदि कोई टीम किसी टास्क पर कम प्रदर्शन कर रही है, तो संबंधित बार यह दिखाएंगे मानो टीम ने उस टास्क पर अपेक्षा से कम दिन काम किया है (अर्थात टास्क संभवतः समय सीमा के बाद पूरा होगा)।
आउटपुट:
ऊपर दिए गए प्लॉट से दिखता है कि टीमें अपने टास्क पूरे करने में एक-सी गति से नहीं चल रहीं, जो कई वास्तविक प्रोजेक्ट्स में सामान्य है। इस प्लॉट से और जानकारी पाने के लिए, मान लें कि वर्तमान तारीख 17 नवंबर 2022 है और इस तारीख को अपने चार्ट पर चिह्नित करें:
आउटपुट:
Project X की वर्तमान स्थिति के बारे में हम निम्न टिप्पणियां कर सकते हैं:
ऐसी टिप्पणियां टीम लीडर्स और प्रोजेक्ट मैनेजर को प्रोजेक्ट अनुसूची को समायोजित करने और आवश्यक संसाधन समय पर आवंटित करने में मदद कर सकती हैं ताकि डिलीवेरेबल्स में देरी से बचा जा सके।
अन्य संभावित समायोजन
हम अपने matplotlib Gantt चार्ट में और विवरण जोड़ सकते हैं। उदाहरण के लिए:
हालांकि, यह महत्वपूर्ण है कि हम अपने Gantt चार्ट को साफ-सुथरा रखें और उसे बहुत अधिक विवरणों से अव्यवस्थित न करें। अन्य किसी भी डेटा विज़ुअलाइज़ेशन की तरह, हमें प्लॉट की सूचना क्षमता और उसकी पठनीयता के बीच, साथ ही उस प्लॉट को बनाने के लिए उपयोग किए गए कोड की पठनीयता के बीच आवश्यक संतुलन बनाए रखना होता है।
Matplotlib के साथ Python में अपना Gantt चार्ट बनाना शुरू करें
सारांश के रूप में, इस ट्यूटोरियल में, हमने देखा:
इसके अलावा, हमने विभिन्न Gantt चार्ट उदाहरण और उन्हें बनाने की चरण-दर-चरण प्रक्रिया भी देखी।
Python में प्रभावशाली और जानकारीपूर्ण चार्ट बनाना सीखने के लिए एक अधिक एकीकृत दृष्टिकोण हेतु, हमारा Data Visualization with Python स्किल ट्रैक देखें।