亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實(shí)現(xiàn)甘特圖繪制的示例詳解

 更新時(shí)間:2023年04月10日 14:09:27   作者:關(guān)于數(shù)據(jù)分析與可視化  
相信在平常實(shí)際工作當(dāng)中,需要對(duì)整體的項(xiàng)目做一個(gè)梳理,這時(shí)如果有一個(gè)網(wǎng)頁(yè)應(yīng)用能夠?qū)φw項(xiàng)目有一個(gè)可視化頁(yè)面的展示,是不是會(huì)對(duì)你的實(shí)際工作有所幫助呢?今天小編就通過(guò)Python+Streamlit框架來(lái)繪制甘特圖并制作可視化大屏,需要的可以參考一下

相信大家在平常實(shí)際工作當(dāng)中,需要對(duì)整體的項(xiàng)目做一個(gè)梳理,這時(shí)如果有一個(gè)網(wǎng)頁(yè)應(yīng)用能夠?qū)φw項(xiàng)目有一個(gè)可視化頁(yè)面的展示,是不是會(huì)對(duì)你的實(shí)際工作有所幫助呢?說(shuō)不定還可以讓你事半功倍,今天小編就想通過(guò)Python+Streamlit框架來(lái)對(duì)整體項(xiàng)目的進(jìn)展做一個(gè)可視化的展示。

前期準(zhǔn)備

因?yàn)槲覀冞@次需要用到streamlit、streamlit-aggrid以及plotly模塊,先通過(guò)pip命令將這些模塊下載下來(lái),其中streamlit-aggrid主要是將數(shù)據(jù)表能夠呈現(xiàn)在頁(yè)面上

pip install streamlit-aggrid
pip install plotly

頁(yè)面的結(jié)構(gòu)

整體頁(yè)面的結(jié)構(gòu)是左邊有一個(gè)工具欄,包含了該網(wǎng)頁(yè)的一些簡(jiǎn)短介紹、以及一個(gè)希望使用者評(píng)分和反饋的模塊

而右邊則的Section1是項(xiàng)目規(guī)劃文件的模板樣式,主要是在CSV文件當(dāng)中寫(xiě)清楚任務(wù)的細(xì)節(jié),包括任務(wù)名稱(chēng)、任務(wù)描述、開(kāi)始與結(jié)束時(shí)間等等內(nèi)容。Section2則是允許用戶上傳自己的CSV文件,修改CSV文件中項(xiàng)目的內(nèi)容以及一個(gè)可視化的呈現(xiàn),而Section3則是將上述的內(nèi)容導(dǎo)出至HTML文件當(dāng)中去

代碼部分

下面便是該頁(yè)面的代碼部分

from st_aggrid import AgGrid
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
from  PIL import Image
import io

接下來(lái)我們針對(duì)左邊工具欄的部分進(jìn)行一個(gè)開(kāi)發(fā),主要是對(duì)該頁(yè)面進(jìn)行一個(gè)簡(jiǎn)單的介紹以及評(píng)分等功能

logo = Image.open(r'wechat_logo.jpg')
st.sidebar.image(logo,  width=120)

with st.sidebar.expander("關(guān)于此APP的功能"):
     st.write("""
        項(xiàng)目的簡(jiǎn)單介紹)
     """)

with st.sidebar.form(key='columns_in_form',clear_on_submit=True): 
    st.write('反饋')
    st.write('<style>div.row-widget.stRadio > div{flex-direction:row;} </style>', unsafe_allow_html=True) # 水平方向的按鈕
    rating=st.radio("打分",('1','2','3','4','5'),index=4)
    text=st.text_input(label='反饋')
    submitted = st.form_submit_button('提交')
    if submitted:
      st.write('感謝')
      st.markdown('您的評(píng)分是:')
      st.markdown(rating)
      st.markdown('您的反饋是:')
      st.markdown(text)

結(jié)果如下圖所示

主頁(yè)面的開(kāi)發(fā)-Section 1

接下去便是主頁(yè)面的Section 1部分的開(kāi)發(fā),主要是展示項(xiàng)目CSV文件的樣式,包含了哪些列、列名分別是什么等等,代碼如下

st.markdown(""" <style> .font {                                          
    font-size:30px ; font-family: 'Cooper Black'; color: #FF9633;} 
    </style> """, unsafe_allow_html=True)
st.markdown('<p class="font">上傳您的CSV文件</p>', unsafe_allow_html=True)

st.subheader('第一步:下載模板文件')
image = Image.open(r'example.png') # 模板文件的截圖
st.image(image,  caption='確保列名是一致的')

@st.cache_data
def convert_df(df):
     return df.to_csv().encode('utf-8')

df=pd.read_csv(r'template.csv', encoding='gbk')
csv = convert_df(df)
st.download_button(
     label="下載模板",
     data=csv,
     file_name='project_template.csv',
     mime='text/csv',
 )

我們提供了下載按鈕可以讓用戶一鍵下載模板文件,最后呈現(xiàn)的樣子是這樣的

主頁(yè)頁(yè)面的開(kāi)發(fā)-Section 2

接下去便是上傳我們自己的CSV文件,這里我們用到了streamlit_aggrid模塊,該模塊的好處就在于可以對(duì)數(shù)據(jù)表進(jìn)行一個(gè)展示,并且可以對(duì)其中的數(shù)據(jù)進(jìn)行修改,

st.subheader('Step 2: Upload your project plan file')
uploaded_file = st.file_uploader(
    "上傳文件",
    type=['csv'])
if uploaded_file is not None:
    Tasks = pd.read_csv(uploaded_file, encoding='gbk')
    Tasks['Start'] = Tasks['Start'].astype('datetime64')
    Tasks['Finish'] = Tasks['Finish'].astype('datetime64')

    grid_response = AgGrid(
        Tasks,
        editable=True,
        height=300,
        width='100%',
    )

    updated = grid_response['data']
    df = pd.DataFrame(updated)

output

接下去便是對(duì)數(shù)據(jù)的可視化呈現(xiàn)了,這里是用Plotly模塊來(lái)繪制甘特圖,我們可以選擇是以團(tuán)隊(duì)的維度來(lái)繪制或者是以項(xiàng)目完成的進(jìn)度來(lái)繪制,代碼如下

st.subheader('第三部:繪制甘特圖')

Options = st.selectbox("以下面哪種維度來(lái)繪制甘特圖:", ['Team', 'Completion Pct'], index=0)
if st.button('繪制甘特圖'):
    fig = px.timeline(
        df,
        x_start="Start",
        x_end="Finish",
        y="Task",
        color=Options,
        hover_name="Task Description"
    )

    fig.update_yaxes(
        autorange="reversed")

    fig.update_layout(
        title='Project Plan Gantt Chart',
        bargap=0.2,
        height=600,
        xaxis_title="Date",
        yaxis_title="Project Name",
        title_x=0.5,
        xaxis=dict(
            tickfont_size=15,
            tickangle=270,
            rangeslider_visible=True,
            side="top",
            showgrid=True,
            zeroline=True,
            showline=True,
            showticklabels=True,
            tickformat="%x\n",
        )
    )

    fig.update_xaxes(tickangle=0, tickfont=dict(family='Rockwell', color='blue', size=15))
    st.plotly_chart(fig, use_container_width=True)  # 繪制甘特圖至頁(yè)面上
    st.subheader(
        'Bonus: 導(dǎo)出至HTML') 
    buffer = io.StringIO()
    fig.write_html(buffer, include_plotlyjs='cdn')
    html_bytes = buffer.getvalue().encode()
    st.download_button(
        label='Export to HTML',
        data=html_bytes,
        file_name='Gantt.html',
        mime='text/html'
    )
else:
    st.write('---')

到此這篇關(guān)于Python實(shí)現(xiàn)甘特圖繪制的示例詳解的文章就介紹到這了,更多相關(guān)Python甘特圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例

    python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例

    在本篇文章里小編給大家整理的是關(guān)于python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例,需要的朋友們參考學(xué)習(xí)下。
    2020-02-02
  • Python深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)基本原理

    Python深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)基本原理

    人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡(jiǎn)寫(xiě)為ANNs)也簡(jiǎn)稱(chēng)為神經(jīng)網(wǎng)絡(luò)(NNs)或稱(chēng)作連接模型(Connection Model),它是一種模仿動(dòng)物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型
    2021-10-10
  • Django中ModelForm組件的簡(jiǎn)單配置與使用教程

    Django中ModelForm組件的簡(jiǎn)單配置與使用教程

    modelform是django中基于已有的model,快速生成的具有form功能的一個(gè)模塊,下面這篇文章主要給大家介紹了關(guān)于Django中ModelForm組件的簡(jiǎn)單配置與使用教程,需要的朋友可以參考下
    2022-10-10
  • 圖解Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別

    圖解Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別

    這篇文章主要介紹了Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別,淺拷貝和深拷貝想必大家在學(xué)習(xí)中遇到很多次,這也是面試中常常被問(wèn)到的問(wèn)題,本文就帶你詳細(xì)了解一下
    2023-05-05
  • Python格式化字符串f-string概覽(小結(jié))

    Python格式化字符串f-string概覽(小結(jié))

    這篇文章主要介紹了Python格式化字符串f-string概覽(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python 如何創(chuàng)建一個(gè)簡(jiǎn)單的REST接口

    Python 如何創(chuàng)建一個(gè)簡(jiǎn)單的REST接口

    這篇文章主要介紹了Python 如何創(chuàng)建一個(gè)簡(jiǎn)單的REST接口,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 將.ipynb文件轉(zhuǎn)換成.py文件詳細(xì)步驟(一看就會(huì))

    將.ipynb文件轉(zhuǎn)換成.py文件詳細(xì)步驟(一看就會(huì))

    這篇文章主要給大家介紹了關(guān)于如何將.ipynb文件轉(zhuǎn)換成.py文件的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),大家基本一看就會(huì),需要的朋友可以參考下
    2023-07-07
  • Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情

    Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情

    這篇文章主要介紹了Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Python實(shí)現(xiàn)壓縮和解壓縮ZIP文件的方法分析

    Python實(shí)現(xiàn)壓縮和解壓縮ZIP文件的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)壓縮和解壓縮ZIP文件的方法,結(jié)合具體實(shí)例形式分析了Python操作zip文件壓縮與解壓縮的常用操作技巧,需要的朋友可以參考下
    2017-09-09
  • 淺談Python type的使用

    淺談Python type的使用

    今天小編就為大家分享一篇淺談Python type的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論