Python+甘特图及标签设置

图示

在这里插入图片描述

甘特图代码

import matplotlib.pyplot as plt
import numpy as np


class ProjectEmement:
    def __init__(self, name_, starttime_: float, endtime_: float, fact_endtime_: float, grade_, rootlist_: list, keylist_: list, isover_=-1):
        self.name = name_
        self.starttime = starttime_
        self.endtime = endtime_
        self.fact_endtime = fact_endtime_
        self.grade = grade_
        self.rootlist = rootlist_
        self.keylist = keylist_
        self.isover = isover_

        # 预处理
        self.preprocess()
        pass

    def preprocess(self):
        self.starttime = min(self.starttime, self.endtime)
        self.fact_endtime = max(self.starttime, self.fact_endtime)
        self.costtime = self.fact_endtime - self.starttime
        pass


class GanttImage:
    def __init__(self, elementlist_: list):
        self.elementlist = elementlist_
        self.get_gant_image()
        pass

    def get_gant_csv(self):
        pass

    def get_gant_tree(self):
        pass

    def get_gant_image(self):
        self.bottomvalue = []
        self.innervalue = []
        self.topvalue = []
        self.tick_label = []
        self.text = []
        self.idx = []
        idx = 0
        for k in self.elementlist:
            tmp = [k.starttime, k.endtime, k.fact_endtime]
            self.bottomvalue.append(tmp[0])
            self.innervalue.append(tmp[1])
            self.topvalue.append(tmp[2])
            self.tick_label.append(k.name)
            self.text.append(",".join(k.keylist))
            self.idx.append(idx)
            idx += 1
        pass


def plot_gannt(pltimage: GanttImage):
    # 设置绘图风格
    plt.style.use('ggplot')
    # 处理中文乱码
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    for k in pltimage.idx:
        # 开始时间选择white
        # 实际结束时间设置为红色,black
        # 原始结束时间设置为蓝色,blue
        # 选择绘图顺利
        image_color = ["white", "black", "red"]
        pltvalue = [pltimage.bottomvalue[k],
                    pltimage.innervalue[k], pltimage.topvalue[k]]
        sorted_id = sorted(range(len(pltvalue)),
                           key=lambda mm: pltvalue[mm], reverse=True)
        # 绘制甘特图
        for kk in sorted_id:
            plt.barh(y=k, width=pltvalue[kk],
                     height=0.1, color=image_color[kk])
        plt.text(max(pltvalue), k, pltimage.text[k], ha="left", va='center')
        plt.xticks(range(0, 13), [str((k % 12)+1)+"月" for k in range(0, 13)])

        # 绘制指示文本
        plt.barh(y=pltimage.idx, width=pltimage.bottomvalue, height=0.1,
                 color=image_color[0], tick_label=pltimage.tick_label)
    plt.show()
    pass


def help_example():
    e0 = ProjectEmement("任务1", 1, 3, 2, 1, ["什么"], ["内容"], 1)
    e1 = ProjectEmement("任务2", 6, 8, 9, 1, ["为什么"], ["这样写"], 1)
    e2 = ProjectEmement("任务3", 10, 11, 12, 1, ["好"], ["的"], 1)
    plot_gannt(GanttImage([e0, e1, e2]))
    pass


def help_example0():

    # 设置绘图风格
    plt.style.use('ggplot')
    # 处理中文乱码
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    # 绘制条形图
    idx = list(range(10))
    plt.barh(y=idx,
             width=idx,
             height=0.1,  # 指定条形图y轴的数值(python3.7不能用y,而应该a用height)
             tick_label=idx,  # 指定条形图x轴的刻度标签
             color='steelblue'  # 指定条形图的填充色
             )
    plt.barh(y=idx,
             width=[k*0.8 for k in idx],
             height=0.1,  # 指定条形图y轴的数值(python3.7不能用y,而应该用height)
             color='white'  # 指定条形图的填充色
             )

    plt.show()

    pass


if __name__ == "__main__":
    help_example()
    pass

···

# 注意事项
利用柱状图设计
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 甘特图是一种项目管理工具,通过时间轴的方式展示项目任务与进度,帮助团队成员清晰了解项目进展情况。Python可以通过使用各种库和框架来制作甘特图。 在Python中,可以使用matplotlib库来绘制甘特图。matplotlib是一个功能强大的绘图库,可以用于生成各种类型的图表,包括甘特图。 首先,需要安装matplotlib库。可以使用pip命令在命令行中安装:pip install matplotlib。 然后,导入matplotlib库,并创建一个图表对象。可以使用subplot()函数来创建一个绘图区域,并设置其大小。 接下来,可以使用barh()函数绘制甘特图的条形图。barh函数可以绘制水平条形图,每个条形代表一个任务。通过设置条形的位置、高度和宽度来表示任务的起始时间、持续时间和任务名称。 通过设置坐标轴的标签和刻度,可以在甘特图上显示时间轴和任务名称。 最后,使用show()函数显示绘制的甘特图。 总结起来,制作甘特图的主要步骤如下: 1. 安装matplotlib库。 2. 导入matplotlib库,并创建图表对象。 3. 使用barh()函数绘制甘特图的条形图。 4. 设置坐标轴的标签和刻度。 5. 显示绘制的甘特图。 通过这些步骤,可以使用Python制作出具有时间轴和任务进度的甘特图。这为项目管理提供了一种清晰可视化的工具,帮助团队成员更好地理解和掌握项目进展情况。 ### 回答2: Python可以使用多种库来制作甘特图,其中最常用的是matplotlib和plotly库。下面以matplotlib为例,简要说明Python如何制作甘特图。 首先,我们需要导入matplotlib库,并创建一个绘图对象和一个子图对象: ``` import matplotlib.pyplot as plt fig, ax = plt.subplots() ``` 接下来,我们需要设置图表的大小、标题和刻度: ``` fig.set_size_inches(10, 6) # 设置图表大小 ax.set_title("甘特图") # 设置图表标题 ax.set_xlabel("时间") # 设置x轴标签 ax.set_ylabel("任务") # 设置y轴标签 ax.grid(True) # 显示网格线 ``` 然后,我们需要定义任务的起始时间、持续时间和任务名: ``` start_dates = [1, 3, 5] # 任务起始时间列表 durations = [2, 4, 3] # 任务持续时间列表 task_names = ["任务1", "任务2", "任务3"] # 任务名称列表 ``` 接下来,我们可以使用matplotlib的barh函数绘制甘特图的条形图: ``` bar_height = 0.5 # 条形图高度 for i in range(len(start_dates)): ax.barh(task_names[i], durations[i], left=start_dates[i], height=bar_height, align="center") # 绘制条形图 ``` 最后,我们可以使用matplotlib的yticks函数修改y轴刻度为任务名称,并调整图表的边界: ``` ax.set_yticks(range(len(task_names))) # 设置y轴刻度为任务名称 ax.set_yticklabels(task_names) # 设置y轴刻度标签为任务名称 ax.set_xlim(0, max(start_dates) + max(durations) + 1) # 调整x轴刻度范围 plt.tight_layout() # 调整图表布局 plt.show() # 展示图表 ``` 通过以上步骤,我们可以使用Python的matplotlib库来制作一个简单的甘特图。当然,根据需求的复杂程度,我们可以进一步使用其他功能扩展甘特图的样式和功能。 ### 回答3: Python可以使用一些第三方库来制作甘特图,其中比较常用的是Matplotlib和Plotly。 使用Matplotlib制作甘特图可以按照以下步骤进行: 1. 导入Matplotlib库:`import matplotlib.pyplot as plt` 2. 创建一张图像:`fig, ax = plt.subplots(figsize=(10, 5))` 3. 设置横轴和纵轴的范围:`ax.set_xlim(start_date, end_date)`和`ax.set_ylim(0, total_tasks)` 4. 添加任务的水平条形图:`ax.broken_barh([(start1, end1), (start2, end2), ...], (y1, y2), facecolors=('color1', 'color2', ...))` 5. 添加任务的标签:`ax.text(start_date, (y1 + y2) / 2, 'Task name')` 6. 设置横轴和纵轴的标签:`ax.set_xlabel('Date')`和`ax.set_ylabel('Tasks')` 7. 设置图像的标题:`ax.set_title('Gantt Chart')` 8. 显示图像:`plt.show()` 使用Plotly制作甘特图可以按照以下步骤进行: 1. 导入Plotly库:`import plotly.express as px` 2. 创建一个DataFrame,包含任务名称、开始日期和结束日期等信息 3. 使用`px.timeline()`创建一个基本的甘特图对象 4. 使用`fig.add_trace()`在甘特图上添加任务 5. 设置甘特图的布局和样式,如标题、轴标签、轴范围等 6. 使用`fig.show()`显示甘特图 同时,也可以使用其他一些第三方库来绘制具有更丰富功能的甘特图,如GanttPV、pyGantt和ganttchart等。 需要根据具体项目需求选择合适的库和实现方式来制作甘特图。无论使用哪种方法,Python的灵活性和可扩展性使得制作甘特图变得简单且具有较高的可定制性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值