首页/文章/ 详情

Python制作项目进度计划图

4月前浏览229

 

甘特图是一种直观地用‌条形图‌形式展现项目计划的工具。以横轴代表时间‌,清晰展示项目从开始到结束的整个周期;纵轴代表任务列表‌,列出项目中所有需要完成的工作项;条形块代表任务‌,每个任务的‌位置‌表示开始和结束时间,‌长度‌表示任务耗时长短;连接线表示拓扑(依赖)关系‌,明确展示哪个任务完成后才能开始下一个任务(例如,必须先“设计完成”才能开始“开发”)。

  import matplotlib.pyplot as plt


defmain():
    # 项目关键节点
    project = ["需求分析",
              "初步设计",
              "施工图设计",
              "建造阶段",
              "竣工验收",
              "技术总结"]
    
    start_dates = [1510182530]
    end_dates   = [4917242935]

    # 实际完成情况
    actual_starts = [i+1for i in start_dates]
    actual_ends   = [i+1for i in end_dates]

    # 创建甘特图
    fig, ax = plt.subplots(figsize=(126))
    plt.rcParams['font.sans-serif'] = ['MiSans']    #这个字体能够支持中英文字符plt.rcParams['axes.unicode_minus'] = False      # 正常显示负号

    # 计划时间线
    ax.hlines(y=project, xmin=start_dates, xmax=end_dates, 
            color='blue', linewidth=8, alpha=0.5, label='计划')
    

    # 实际时间线
    for i, idx inenumerate(project):
        # 使用step绘制水平阶梯图
        ax.step([actual_starts[i], actual_ends[i]], 
                [idx,idx], 
                where = 'mid', color = 'red', linewidth = 3)
        
        # 添加实际开始和结束标记
        ax.plot(actual_starts[i], idx, '>'
                markersize=10, color='darkred')
        ax.plot(actual_ends[i], idx, '|'
                markersize=12, color='darkred')
        
    # 添加延迟标注
    for i, (plan, actual) inenumerate(zip(start_dates, actual_starts)):
        if actual > plan:
            delay = actual - plan
            ax.annotate(f'+{delay}天'
                        xy=(actual_ends[i], project[i]),
                        xytext=(actual_ends[i]+1, project[i]),
                        arrowprops=dict(arrowstyle='->', color='red'),
                        color='black', fontweight='bold')
    
    
    # 设置标题和标签
    ax.set_title('项目进度计划图', fontsize=18)
    ax.set_xlabel('时间轴', fontsize=13)
    ax.set_ylabel('关键节点', fontsize=13)

    # 添加图例和网格
    ax.legend(['计划进度''实际进度'], loc='lower right')
    ax.grid(axis='x', alpha=0.3)

    # 添加今日标记
    today = 20
    ax.axvline(today, color='green', linestyle='--', alpha=0.7)
    ax.text(today+0.2, project[0], '今日'
            rotation=90, va='bottom', color='green')

    plt.tight_layout()
    fig.savefig("项目进度计划图.png", dpi=300)
    plt.show()



if __name__ == "__main__":
    main( )

 


来源:数值分析与有限元编程
ACTpythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-07-08
最近编辑:4月前
太白金星
本科 慢慢来
获赞 12粉丝 28文章 367课程 0
点赞
收藏
作者推荐

杜哈梅积分的数值方法

Duhamel积分的基本原理是将任意载荷视为一系列脉冲激励的叠加,系统的响应可以表示成对这些脉冲激励的响应函数的叠加。在单自由度系统中,Duhamel积分的形式为:其中,是系统在时间的位移响应,是外载荷函数,是质量,是无阻尼自然频率,为有阻尼时结构的频率,是阻尼比‌.当外荷载不能用解析函数表达时,则式(1)需按等时间间隔进行离散,用数值方法来计算:如图1所示,在积分时,每一个小矩形的高为。注意这不是斐波那契数列那样的简单相加,因为函数中的随时在变化。因此,需要定义一个高阶函数,比如deff1(n):deff2(x):returnx*nreturnf2times3=f1(3)print(times3(10))#输出:30,10的3倍式(2)的高阶函数#杜哈梅积分函数,荷载为简谐荷载sin(t)deffunc_duhame(zeta,omg,t):deffunc1(tau):y=np.sin(tau)*np.exp(-zeta*omg*(t-tau))*np.sin(omg*(t-tau))return1/omg*yreturnfunc1计算图1中时刻的动位移,可以用这两个高阶函数。f=func_duhame(zeta,omg,t)#返回已经代入t的式(1)l=np.arange(0.0,t,delta_tau)q1=map(f,l)#计算每个小矩形的高q2=map(lambdax:x*delta_tau,q1)#计算每个小矩形的面积res=reduce(lambdax,y:x+y,q2)#每个小矩形的面积累加得到积分结果完整代码importmatplotlib.pyplotaspltfromfunctoolsimportreduceimportnumpyasnp#杜哈梅积分函数deffunc_duhame(zeta,omg,t):deffunc1(tau):y=np.sin(tau)*np.exp(-zeta*omg*(t-tau))*np.sin(omg*(t-tau))return1/omg*yreturnfunc1if__name__=="__main__":plt.style.use("ggplot")plt.rcParams['font.sans-serif']=['MiSans']#这个字体能够支持中英文字符plt.rcParams['axes.unicode_minus']=False#正常显示负号omg=1.0#自振频率zeta=0.05#固有阻尼比dt=0.005#时间间隔t0=np.arange(0.0,40,dt)step=len(t0)dpms=np.zeros(step)fori,tinenumerate(t0):f=func_duhame(zeta,omg,t)ifi==0:l=[0,t0[0]]else:l=t0[0:i+1]res=reduce(lambdax,y:x+y,map(lambdax:x*dt,map(f,l)))dpms[i]=resfig,ax1=plt.subplots(nrows=1,ncols=1,sharex=True,)ax1.plot(t0,dpms,linestyle='--',color='#1661ab',label='数值法')ax1.set(title='位移时程')ax1.grid()ax1.legend(frameon=True,#启用边框framealpha=0.8,#设置透明度fancybox=False,#边框圆角与否shadow=True,#是否启用阴影facecolor='lightgrey',#背景颜色edgecolor='dimgrey',#边框颜色loc='upperleft')fig.savefig("32.png",dpi=300)plt.show()来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈