python的matplotlib.pyplot繪制甘特圖


博主本來就想簡單地找一下代碼,畫一幅甘特圖,結果百度之后發現甘特圖的代碼基本都不是用matplotlib庫,但是像柱狀圖等統計圖通常都是用這個庫進行繪制的,所以博主就花了一些時間,自己敲了一份代碼,簡單地繪制了一份博主想要的甘特圖,下邊博主就來介紹分享一下。

 

何為甘特圖?

甘特圖(Gantt chart)又稱為橫道圖、條狀圖(Bar chart)。其通過條狀圖來顯示項目,進度,和其他時間相關的系統進展的內在關系隨着時間進展的情況。以提出者亨利·勞倫斯·甘特(Henry Laurence Gantt)先生的名字命名。

 

甘特圖以圖示通過活動列表和時間刻度表示出特定項目的順序與持續時間。一條線條圖, 橫軸表示時間, 縱軸表示項目,線條表示期間計划和實際完成情況。直觀表明計划何時進行,進展與要求的對比。便於管理者弄清項目的剩余任務,評估工作進度。
甘特圖是以作業排序為目的,將活動與時間聯系起來的最早嘗試的工具之一,幫助企業描述 工作中心、超時工作等資源的使用。
甘特圖包含以下三個含義:
1、以圖形或表格的形式顯示活動;
2、通用的顯示進度的方法;
3、構造時含日歷天和持續時間,不將周末節假算在進度內。
簡單、醒目、便於編制,在管理中廣泛應用。
甘特圖按內容不同,分為計划圖表、 負荷圖表、機器閑置圖表、人員閑置圖表和進度表五種形式。
 
下面先看一下最終的效果圖吧
 
甘特圖(灰度版)
甘特圖(RGBA版)
 
灰度版源碼如下:
def getGant():
    timelist = [['2020-6-8','2020-6-14'],['2020-6-15','2020-6-21'],['2020-6-22','2020-7-4'],['2020-7-5','2020-7-10'],['2020-7-11','2020-7-17']]
    states=['環境配置','設計階段','研發階段','測試階段','成果驗收']
    xlabels=['2020-6-8','2020-6-15','2020-6-21','2020-7-5','2020-7-11','2020-7-17']
    ylabels=['第一階段','第二階段','第三階段','第四階段','第五階段']
    xtimes=[0]
    ystates=[0]
    location=0
    plt.figure()
    plt.figure(num=3, figsize=(9, 2))   # figsize的設置長和寬

    for i in range(len(timelist)):
        Start=timelist[i][0]
        Finish=timelist[i][1]
        startTime = datetime.datetime.strptime(Start, "%Y-%m-%d")
        finishTime = datetime.datetime.strptime(Finish, "%Y-%m-%d")
        day = (finishTime-startTime).days
#        plt.bar(40,10,label=xlabels[i],color='g')
        plt.axhline(y=i+0.5, color='k', linestyle='-',alpha= 0.5,linewidth=0.8)
        plt.barh(i,day,0.5,location,alpha=(5+i)/10,color = 'g', align="center")    #y值,寬度,高度,起始x
        plt.text(location+1,i+0.52,states[i], size = 10, alpha = 1)
#        plt.barh(y,width,1,location,facecolor='tan',edgecolor='r',alpha=0.6,tick_label=label,hatch=".")
        plt.xlabel(u"時間")
        plt.ylabel(u"軟件工程階段")
        location+=day
        xtimes.append(location)
        ystates.append(i+1)
            
#    plt.legend()#若必要可顯示圖例
    plt.xticks(xtimes, xlabels, rotation='horizontal')
    plt.yticks(ystates, ylabels, rotation='horizontal')
    plt.title(u'甘特圖')
#    plt.grid(True)
    plt.savefig('甘特圖.png', dpi=300, format='png',bbox_inches="tight") #bbox_inches="tight"解決X軸時間兩個字不被保存的問題
    plt.show()#若將show函數放在savefig之前,則容易造成保存的圖片為空白,因為show函數數重新定義一個畫板

在代碼編寫過程中還是遇到了不少的問題的,比如中文編碼問題、圖片保存不全問題等。

大家可以關注微信公眾號,后台回復甘特圖,獲取源碼。

 

 

 

 

 掃碼關注公眾號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM