博主本来就想简单地找一下代码,画一幅甘特图,结果百度之后发现甘特图的代码基本都不是用matplotlib库,但是像柱状图等统计图通常都是用这个库进行绘制的,所以博主就花了一些时间,自己敲了一份代码,简单地绘制了一份博主想要的甘特图,下边博主就来介绍分享一下。
何为甘特图?
甘特图(Gantt chart)又称为横道图、条状图(Bar chart)。其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况。以提出者亨利·劳伦斯·甘特(Henry Laurence Gantt)先生的名字命名。
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函数数重新定义一个画板
在代码编写过程中还是遇到了不少的问题的,比如中文编码问题、图片保存不全问题等。
大家可以关注微信公众号,后台回复甘特图,获取源码。
扫码关注公众号
原文:https://www.cnblogs.com/pygisxss/p/13339413.html