zoukankan      html  css  js  c++  java
  • 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函数数重新定义一个画板

    在代码编写过程中还是遇到了不少的问题的,比如中文编码问题、图片保存不全问题等。

    大家可以关注微信公众号,后台回复甘特图,获取源码。

     扫码关注公众号

  • 相关阅读:
    Lexical Sign Sequence
    (UPCOJ暑期训练)Tally Counters
    (2019hdu多校第十场) Welcome Party
    (2019hdu多校第十场1003) Valentine's Day
    更新,线段树模板(支持相关基本操作)
    linux(deepin)下Clion的安装及环境配置
    2019牛客第7场——C(Governing sand)
    【数论】数论之旅:N!分解素因子及若干问题
    [二分]Kayaking Trip
    [数论之旅]数学定理
  • 原文地址:https://www.cnblogs.com/pygisxss/p/13339413.html
Copyright © 2011-2022 走看看