最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

matplotlib繪制甘特圖的萬(wàn)能模板案例

 更新時(shí)間:2022年04月13日 09:43:51   作者:王小王-123  
matplotlib是常見(jiàn)的繪圖庫(kù),本文主要介紹了matplotlib繪制甘特圖的萬(wàn)能模板案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

定義一個(gè)繪制甘特圖的類(lèi)

# -*- coding: utf-8 -*-
 
from datetime import datetime
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.dates as mdates
import logging
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
 
class Gantt(object):
    #顏色色標(biāo):參考http://colorbrewer2.org/
    RdYlGr = ['#d73027', '#f46d43', '#fdae61','#fee08b', '#ffffbf', '#d9ef8b','#a6d96a', '#66bd63', '#1a9850']
 
    POS_START = 1.0
    POS_STEP = 0.5
 
    def __init__(self, tasks):
        self._fig = plt.figure(figsize=(15,10))
        self._ax = self._fig.add_axes([0.1, 0.1, .75, .5])
 
        self.tasks = tasks[::-1]  # 倒序
 
    def _format_date(self, date_string):
        try:
            date = datetime.datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')  # 將日期字符串轉(zhuǎn)換成datetime類(lèi)型
        except ValueError as err:
            logging.error("String '{0}' can not be converted to datetime object: {1}"
                   .format(date_string, err))
            sys.exit(-1)
        mpl_date = mdates.date2num(date)  # 得到日期類(lèi)型的時(shí)間戳
        return mpl_date
 
    def _plot_bars(self):
        i = 0
        for task in self.tasks:
            start = self._format_date(task['start'])  # 獲取任務(wù)開(kāi)始時(shí)間的時(shí)間戳
            end = self._format_date(task['end'])      # 獲取任務(wù)結(jié)束時(shí)間的時(shí)間戳
            bottom = (i * Gantt.POS_STEP) + Gantt.POS_START
            width = end - start    # 柱子的寬度
            self._ax.barh(bottom, width, left=start, height=0.3,align='center', label=task['label'],color = Gantt.RdYlGr[i%len(Gantt.RdYlGr)])
            i += 1
 
    def _configure_yaxis(self):
        task_labels = [t['label'] for t in self.tasks]   # 所有的刻度文本標(biāo)簽
        pos = self._positions(len(task_labels))          # 素有的刻度值
        ylocs = self._ax.set_yticks(pos)                 # 設(shè)置y軸刻度線
        ylabels = self._ax.set_yticklabels(task_labels)  # 設(shè)置y軸刻度標(biāo)簽
        plt.setp(ylabels, size='medium')                 # 設(shè)置y軸刻度標(biāo)簽屬性(中號(hào)字)
 
    def _configure_xaxis(self):
        self._ax.xaxis_date()     # 使用時(shí)間軸
        rule = mdates.rrulewrapper(mdates.WEEKLY, interval=1)   # 生成時(shí)間生成器(每周1個(gè)值,從周日開(kāi)始)
        loc = mdates.RRuleLocator(rule)                         # 生成時(shí)間刻度
        formatter = mdates.DateFormatter("%m/%d")               # 生成時(shí)間格式
 
        self._ax.xaxis.set_major_locator(loc)          # 設(shè)置主刻度
        self._ax.xaxis.set_major_formatter(formatter)  # 設(shè)置主刻度標(biāo)簽格式
        xlabels = self._ax.get_xticklabels()           # 獲取刻度標(biāo)簽對(duì)象
        plt.setp(xlabels, rotation=70, fontsize=10)    # 設(shè)置刻度標(biāo)簽對(duì)象的屬性(30度旋轉(zhuǎn),字體大小10)
 
    def _configure_figure(self):
        self._configure_xaxis()
        self._configure_yaxis()
 
        self._ax.grid(True, axis='x',color='gray')
        self._set_legend()
        self._fig.autofmt_xdate()
 
    def _set_legend(self):
        font = font_manager.FontProperties(size='small')
        self._ax.legend(loc='upper right', prop=font)
 
    def _positions(self, count):
        end = count * Gantt.POS_STEP + Gantt.POS_START
        pos = np.arange(Gantt.POS_START, end, Gantt.POS_STEP)
        return pos
    
    def show(self):
        self._plot_bars()
        self._configure_figure()
        plt.show()

調(diào)用及數(shù)據(jù)格式

if __name__ == '__main__':
    TEST_DATA = (
                 { 'label': '項(xiàng)目調(diào)研', 'start':'2019-02-01 12:00:00', 'end': '2019-03-15 18:00:00'},
                 { 'label': '項(xiàng)目準(zhǔn)備', 'start':'2019-02-15 09:00:00', 'end': '2019-04-09 12:00:00'},
                 { 'label': '制定方案', 'start':'2019-04-10 12:00:00', 'end': '2019-05-30 18:00:00'},
                 { 'label': '項(xiàng)目實(shí)施', 'start':'2019-05-01 09:00:00', 'end': '2019-08-31 13:00:00'},
                 { 'label': '項(xiàng)目培訓(xùn)', 'start':'2019-07-01 09:00:00', 'end': '2019-09-21 13:00:00'},
                 { 'label': '項(xiàng)目驗(yàn)收', 'start':'2019-09-22 09:00:00', 'end': '2019-10-22 13:00:00'},
                 { 'label': '項(xiàng)目竣工', 'start':'2019-10-23 09:00:00', 'end': '2019-11-23 13:00:00'},
                )
    
    gantt = Gantt(TEST_DATA)
    plt.xlabel('項(xiàng)目日期')
    plt.ylabel('項(xiàng)目進(jìn)度')
    plt.title('項(xiàng)目進(jìn)度甘特圖')
    plt.figure(figsize=(10,10),dpi=150)
    gantt.show()

類(lèi)似于展示的圖形

 到此這篇關(guān)于matplotlib繪制甘特圖的萬(wàn)能模板案例的文章就介紹到這了,更多相關(guān)matplotlib 甘特圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python面向?qū)ο缶幊讨畢^(qū)間的插入詳解

    Python面向?qū)ο缶幊讨畢^(qū)間的插入詳解

    這篇文章主要為大家詳細(xì)介紹了Python面向?qū)ο缶幊虒?shí)例教程中的區(qū)間的插入,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-08-08
  • Python高效定時(shí)任務(wù)處理APScheduler庫(kù)深入學(xué)習(xí)

    Python高效定時(shí)任務(wù)處理APScheduler庫(kù)深入學(xué)習(xí)

    這篇文章主要為大家介紹了Python高效定時(shí)任務(wù)處理APScheduler庫(kù)深入學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • python 字符串split的用法分享

    python 字符串split的用法分享

    python 字符串的split方法是用的頻率還是比較多的。比如我們需要存儲(chǔ)一個(gè)很長(zhǎng)的數(shù)據(jù),并且按照有結(jié)構(gòu)的方法存儲(chǔ),方便以后取數(shù)據(jù)進(jìn)行處理。當(dāng)然可以用json的形式。但是也可以把數(shù)據(jù)存儲(chǔ)到一個(gè)字段里面,然后有某種標(biāo)示符來(lái)分割
    2013-03-03
  • python追加元素到列表的方法

    python追加元素到列表的方法

    這篇文章主要介紹了python追加元素到列表的方法,涉及Python列表操作中append方法追加元素的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python?Django框架中表單的用法詳解

    Python?Django框架中表單的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Python?Django框架中表單的用法,例如表單的驗(yàn)證以及利用表單實(shí)現(xiàn)文件上傳等,感興趣的小伙伴可以了解一下
    2022-06-06
  • Pytorch中的廣播機(jī)制詳解(Broadcast)

    Pytorch中的廣播機(jī)制詳解(Broadcast)

    這篇文章主要介紹了Pytorch中的廣播機(jī)制詳解(Broadcast),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用python編寫(xiě)簡(jiǎn)單計(jì)算器

    使用python編寫(xiě)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了使用python編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Pycharm使用爬蟲(chóng)時(shí)遇到etree紅線問(wèn)題及解決

    Pycharm使用爬蟲(chóng)時(shí)遇到etree紅線問(wèn)題及解決

    這篇文章主要介紹了Pycharm使用爬蟲(chóng)時(shí)遇到etree紅線問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python數(shù)據(jù)結(jié)構(gòu)列表

    Python數(shù)據(jù)結(jié)構(gòu)列表

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)列表,本文重點(diǎn)內(nèi)容主要是對(duì)列表數(shù)據(jù)結(jié)構(gòu)的使用,在Python中,序列是一組按順序排列的值。Python?有?3?種內(nèi)置的序列類(lèi)型:字符串、?元組和列表,下面一起進(jìn)入文章了解更詳細(xì)內(nèi)容吧,需要的小伙伴可以參考一下</P><P>
    2021-12-12
  • Python實(shí)現(xiàn)網(wǎng)站注冊(cè)驗(yàn)證碼生成類(lèi)

    Python實(shí)現(xiàn)網(wǎng)站注冊(cè)驗(yàn)證碼生成類(lèi)

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)網(wǎng)站注冊(cè)驗(yàn)證碼生成類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論

福安市| 周宁县| 华容县| 新干县| 花莲市| 精河县| 安溪县| 元阳县| 婺源县| 株洲县| 留坝县| 宿迁市| 铅山县| 吉安县| 大关县| 琼结县| 拉萨市| 平昌县| 濮阳市| 巴彦淖尔市| 海门市| 岳普湖县| 牡丹江市| 浦县| 鄯善县| 洪洞县| 山阴县| 雅江县| 淳安县| 广州市| 普陀区| 汉源县| 巴彦淖尔市| 泾川县| 安宁市| 灵武市| 柯坪县| 赤峰市| 晋江市| 聊城市| 周宁县|