项目调度问题——甘特图

算法设计过程中,使用甘特图判断加入不同算子后所得到的调度计划满足是否满足模型中的逻辑关系是一个效率高且直观的方法,下面是一个已知活动开始结束时间绘制甘特图的方法

def drawGantt(taskNum, start, finish,name = 1):
    # 中文及负号处理
    plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
    plt.rcParams['axes.unicode_minus'] = False
    config = {
        "font.family": 'serif',
        "font.size": 18,
        "mathtext.fontset": 'stix',
        "font.serif": ['SimSun'],
    }
    plt.rcParams.update(config)
    labels = ['task {}'.format(i + 1) for i in range(taskNum)]
    duration = [finish[i] - start[i] for i in range(taskNum)]
    y = np.arange(taskNum)  # 倒转y轴
    xtick = np.arange(start[0], finish[-1] + 2)
    # print(xtick)
    # x_sp = np.cumsum(x_sp)
    # 日期x坐标设置
    # figure
    fig = plt.figure(num=name,figsize=(20, 8))
    ax = fig.add_subplot()
    plt.grid(axis='x', linestyle='-.')
    # plot
    for i in range(len(labels)):
        ax.barh(y, duration, 1, left=start, tick_label=labels, color='#496C88', alpha=1, linewidth=0.4, edgecolor='w')
        for loc in range(len(labels)):
            if labels[loc] != 'task 12' and labels[loc] != 'task 1':
                plt.text(start[loc] + duration[loc] / 2, y[loc], labels[loc], fontsize=15,
                         verticalalignment="center", horizontalalignment="center")
    # setting
    ax.set_xticks(xtick,rotation=90)
    ax.set_xlabel("时间")
    ax.set_ylabel('活动')
    ax.set_xlim(start[0], finish[-1] + 1)

    ax.set_xticklabels(labels=xtick, rotation=90,fontsize = 10)
    # plt.show()
    # plt.close(fig)

输入:taskNum活动数量,整数,start活动开始时间,finish活动结束时间,均为列表,name是figure的名称,建议传参,方便分辨并且避免多个图画到一个figure上。

绘制出的结果如下:

活动1和12为虚活动所以看不到,可以根据自己的实际情况加上图名、参考线、图例等要素。

以上

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嚯口小茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值