>  기사  >  백엔드 개발  >  Python에서 Gantt 차트 그리기를 구현하는 방법은 무엇입니까?

Python에서 Gantt 차트 그리기를 구현하는 방법은 무엇입니까?

王林
王林앞으로
2023-04-25 21:52:132070검색

준비

이번에는 streamlit, streamlit-aggridplotly 모듈을 사용해야 하므로 먼저 pip를 전달합니다. code code> 명령은 이러한 모듈을 다운로드합니다. streamlit-aggrid는 주로 페이지에 데이터 테이블을 표시하는 데 사용됩니다streamlitstreamlit-aggrid以及plotly模块,先通过pip命令将这些模块下载下来,其中streamlit-aggrid主要是将数据表能够呈现在页面上

pip install streamlit-aggrid
pip install plotly

页面的结构

整体页面的结构是左边有一个工具栏,包含了该网页的一些简短介绍、以及一个希望使用者评分和反馈的模块

而右边则的Section1是项目规划文件的模板样式,主要是在CSV文件当中写清楚任务的细节,包括任务名称、任务描述、开始与结束时间等等内容。Section2则是允许用户上传自己的CSV文件,修改CSV文件中项目的内容以及一个可视化的呈现,而Section3则是将上述的内容导出至HTML文件当中去

代码部分

下面便是该页面的代码部分

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

接下来我们针对左边工具栏的部分进行一个开发,主要是对该页面进行一个简单的介绍以及评分等功能

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)

结果如下图所示

Python에서 Gantt 차트 그리기를 구현하는 방법은 무엇입니까?

主页面的开发-Section 1

接下去便是主页面的Section 1部分的开发,主要是展示项目CSV文件的样式,包含了哪些列、列名分别是什么等等,代码如下

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;,
 )

我们提供了下载按钮可以让用户一键下载模板文件,最后呈现的样子是这样的

Python에서 Gantt 차트 그리기를 구현하는 방법은 무엇입니까?

主页页面的开发-Section 2

接下去便是上传我们自己的CSV文件,这里我们用到了streamlit_aggrid模块,该模块的好处就在于可以对数据表进行一个展示,并且可以对其中的数据进行修改,

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

Python에서 Gantt 차트 그리기를 구현하는 방법은 무엇입니까?

接下去便是对数据的可视化呈现了,这里是用Plotly

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;)

페이지 구조🎜🎜전체 페이지 구조는 툴바가 있다는 것입니다. 왼쪽에는 웹 페이지에 대한 간단한 소개와 사용자가 평가하고 피드백을 제공하기를 바라는 모듈이 있습니다 🎜🎜 오른쪽 섹션 1은 세부 사항을 주로 작성하는 프로젝트 계획 문서의 템플릿 스타일입니다. 작업 이름, 작업 설명, 시작 및 종료 시간 등을 포함하여 CSV 파일의 작업 정보입니다. 섹션2에서는 사용자가 자신의 CSV 파일을 업로드하고, CSV 파일의 항목 내용을 수정하고, 시각적 프레젠테이션을 제공할 수 있으며, 섹션3에서는 위 콘텐츠를 HTML 파일로 내보낼 수 있습니다.🎜🎜코드 부분🎜🎜다음은 페이지 코드 부분입니다🎜 rrreee🎜 다음으로는 주로 페이지에 대한 간단한 소개와 채점 및 기타 기능을 제공하기 위한 왼쪽의 툴바를 개발하겠습니다 🎜rrreee🎜결과는 아래 그림과 같습니다🎜🎜파이썬에서 간트 차트 그리기를 구현하는 방법🎜

메인 페이지 개발 - 섹션 1

🎜 다음은 프로젝트 CSV 파일의 스타일, 포함된 열, 열 이름 등을 주로 표시하는 메인 페이지의 섹션 1을 개발하는 것입니다. 코드는 다음과 같습니다🎜rrreee🎜다운로드 버튼을 제공합니다. 사용자가 클릭할 수 있습니다. 템플릿 파일을 다운로드하면 최종 모양은 다음과 같습니다🎜🎜🎜

홈 페이지 개발 - 섹션 2

🎜다음 단계는 자체 CSV 파일을 업로드하는 것입니다. 여기서는 streamlit_aggrid를 사용합니다. > 모듈. 이 모듈의 장점은 데이터 테이블을 표시하고 그 안의 데이터를 수정할 수 있다는 것입니다. 🎜rrreee🎜output🎜🎜파이썬으로 간트 차트를 그리는 방법🎜🎜다음 단계는 데이터를 시각화하는 것입니다. 여기서는 Plotly 모듈을 사용하여 그림을 그립니다. 간트 차트는 팀 규모나 프로젝트 완료 진행 상황에 따라 선택하면 됩니다🎜rrreee.

위 내용은 Python에서 Gantt 차트 그리기를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제