Python绘制甘特图

Python绘制甘特图

废话不说,上代码

complete_time = {(0, 0, 0, 1): (8, 9, 1), (1, 0, 0, 1): (5, 8, 3), (3, 0, 0, 0): (8, 10, 2), (0, 1, 0, 1): (1, 2, 1), (1, 1, 0, 1): (0, 1, 1), (3, 1, 0, 0): (1, 2, 1), (0, 2, 0, 1): (3, 5, 2), (1, 2, 0, 1): (2, 3, 1), (3, 2, 0, 0): (3, 5, 2), (2, 0, 1, 0): (10, 11, 1), (4, 0, 1, 0): (11, 13, 2), (5, 0, 1, 1): (10, 13, 3), (2, 1, 1, 0): (2, 4, 2), (4, 1, 1, 0): (4, 5, 1), (5, 1, 1, 1): (2, 4, 2), (2, 2, 1, 0): (5, 6, 1), (4, 2, 1, 0): (6, 9, 3), (5, 2, 1, 1): (5, 6, 1), (6, 0, 2, 1): (13, 14, 1), (7, 0, 2, 0): (13, 15, 2), (8, 0, 2, 1): (15, 16, 1), (6, 1, 2, 1): (5, 6, 1), (7, 1, 2, 0): (5, 7, 2), (8, 1, 2, 1): (7, 9, 2), (6, 2, 2, 1): (9, 11, 2), (7, 2, 2, 0): (9, 10, 1), (8, 2, 2, 1): (11, 13, 2)}

#  complete_time的key表示的是任务、产品、工作站等信息,value第一个值表示的是任务开始时间,第二个值表示结束时间,第三个值表示加工时间
import matplotlib.pyplot as plt

def plt_gantt(complete_time):
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 显示中文标签
    fontdict_task = {
        "family": "Microsoft YaHei",
        "style": "oblique",
        "weight": "bold",
        "color": "white",
        "size": 14
    }
    fontdict_time = {
        "family": "Microsoft YaHei",
        "style": "oblique",
        "color": "white",
        "size": 12
    }
    color = ['b', 'g', 'r']
    for k, v in complete_time.items():
        if k[3] == 0:
            plt.barh(y=2 * k[2], width=v[2], left=v[0], edgecolor="black", color=color[k[1]])
            plt.text(v[0] + 0.1, 2 * k[2] + 0.1, str(k[1] + 1) + " " + str(k[0]+1), fontdict=fontdict_task)
            plt.text(v[0] + 0.2, 2 * k[2] - 0.2, str(v[0]) + " " + str(v[1]), fontdict=fontdict_time)
        else:
            plt.barh(y=2 * k[2] + 1, width=v[2], left=v[0], edgecolor="black", color=color[k[1]])
            plt.text(v[0] + 0.1, 2 * k[2] + 1 + 0.1, str(k[1] + 1) + " " + str(k[0]+1), fontdict=fontdict_task)
            plt.text(v[0] + 0.2, 2 * k[2] + 1 - 0.2, str(v[0]) + " " + str(v[1]), fontdict=fontdict_time)
    ylabels = []  # 生成y轴标签
    for i in range(3 * 2):
        if i % 2 == 0:
            ylabels.append("工作站 " + str(i // 2 + 1) + " 左边")
        else:
            ylabels.append("工作站 " + str(i // 2 + 1) + " 右边")

    plt.yticks(range(3 * 2), ylabels, rotation=45)
    plt.title("甘特图")
    plt.xlabel("加工时间 /min")
    plt.ylabel("工作站")

    plt.show()

plt_gantt(complete_time)

1、barh函数绘制矩形块

利用matplotlib的柱形图绘制甘特图

核心函数就是plt.barh(),横向绘制矩形块

plt.barh(y, width, left, edgecolor, color)
  • y 参数表示y轴坐标

  • width 表示矩形块的长度,也就是任务加工时间,任务持续时间等参数

  • left 表示矩形块最左边的 x轴坐标,

    这样就能确定一个矩形块在图中的位置

  • edgecolor 表示矩形块的边的颜色,通常设置为 black

  • color 表示矩形块的颜色

2、矩形块标注字体

给矩形块添加标签

plt.text(x, y, label, font_style)
  • x 表示x轴坐标
  • y 表示y轴坐标
  • label 表示要添加的标签内容
  • font_style 标签字体的风格

3、最终效果

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值