Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan lukisan carta Gantt dalam Python?

Bagaimana untuk melaksanakan lukisan carta Gantt dalam Python?

王林
王林ke hadapan
2023-04-25 21:52:132070semak imbas

Persediaan awal

Oleh kerana kita perlu menggunakan modul streamlit, streamlit-aggrid dan plotly kali ini, mula-mula muat turun modul ini melalui perintah pip, yang mana streamlit-aggrid terutamanya ke Jadual data boleh dibentangkan pada halaman

pip install streamlit-aggrid
pip install plotly

Struktur halaman

Struktur keseluruhan halaman ialah bar alat di sebelah kiri, yang mengandungi beberapa pengenalan ringkas kepada halaman web, serta halaman untuk pengguna yang ingin menilai dan modul maklum balas

Bahagian1 di sebelah kanan ialah gaya templat dokumen perancangan projek ini terutamanya menulis butiran tugas dalam fail CSV, termasuk nama tugas, penerangan tugas, masa mula dan tamat, dsb. Section2 membenarkan pengguna memuat naik fail CSV mereka sendiri, mengubah suai kandungan item dalam fail CSV dan memberikan persembahan visual, manakala Section3 mengeksport kandungan di atas ke fail HTML

Bahagian kod

Berikut ialah bahagian kod halaman

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

Seterusnya kami akan membangunkan bar alat di sebelah kiri, terutamanya untuk memberikan pengenalan ringkas kepada halaman dan fungsi pemarkahan

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

with st.sidebar.expander("关于此APP的功能"):
     st.write("""
        项目的简单介绍)
     """)

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

The keputusan adalah seperti yang ditunjukkan di bawah

Bagaimana untuk melaksanakan lukisan carta Gantt dalam Python?

Pembangunan halaman utama - Bahagian 1

Langkah seterusnya ialah pembangunan Bahagian 1 halaman utama , terutamanya untuk paparkan gaya fail CSV projek, lajur mana yang disertakan, apakah nama lajur, dsb. Kodnya adalah seperti berikut

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

st.subheader(&#39;第一步:下载模板文件&#39;)
image = Image.open(r&#39;example.png&#39;) # 模板文件的截图
st.image(image,  caption=&#39;确保列名是一致的&#39;)

@st.cache_data
def convert_df(df):
     return df.to_csv().encode(&#39;utf-8&#39;)

df=pd.read_csv(r&#39;template.csv&#39;, encoding=&#39;gbk&#39;)
csv = convert_df(df)
st.download_button(
     label="下载模板",
     data=csv,
     file_name=&#39;project_template.csv&#39;,
     mime=&#39;text/csv&#39;,
 )

Kami menyediakan butang muat turun untuk membolehkan pengguna memuat turun fail templat dengan satu klik, dan akhirnya membentangkannya Ia kelihatan seperti ini

Bagaimana untuk melaksanakan lukisan carta Gantt dalam Python?

Pembangunan halaman utama - Bahagian 2

Langkah seterusnya ialah memuat naik fail CSV kami sendiri, yang kami gunakan di sinistreamlit_aggridModul, kelebihan modul ini ialah ia boleh memaparkan jadual data dan mengubah suai data di dalamnya,

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

    grid_response = AgGrid(
        Tasks,
        editable=True,
        height=300,
        width=&#39;100%&#39;,
    )

    updated = grid_response[&#39;data&#39;]
    df = pd.DataFrame(updated)

output

Bagaimana untuk melaksanakan lukisan carta Gantt dalam Python?

Langkah seterusnya ialah memvisualisasikan data Di sini kami menggunakan modul Plotly untuk melukis carta Gantt Kami boleh memilih untuk melukisnya dari perspektif pasukan atau kemajuan penyiapan projek

st.subheader(&#39;第三部:绘制甘特图&#39;)

Options = st.selectbox("以下面哪种维度来绘制甘特图:", [&#39;Team&#39;, &#39;Completion Pct&#39;], index=0)
if st.button(&#39;绘制甘特图&#39;):
    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=&#39;Project Plan Gantt Chart&#39;,
        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=&#39;Rockwell&#39;, color=&#39;blue&#39;, size=15))
    st.plotly_chart(fig, use_container_width=True)  # 绘制甘特图至页面上
    st.subheader(
        &#39;Bonus: 导出至HTML&#39;) 
    buffer = io.StringIO()
    fig.write_html(buffer, include_plotlyjs=&#39;cdn&#39;)
    html_bytes = buffer.getvalue().encode()
    st.download_button(
        label=&#39;Export to HTML&#39;,
        data=html_bytes,
        file_name=&#39;Gantt.html&#39;,
        mime=&#39;text/html&#39;
    )
else:
    st.write(&#39;---&#39;)

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan lukisan carta Gantt dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam