您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Python如何实现甘特图绘制?

2024/8/12 12:58:49发布125次查看
前期准备因为我们这次需要用到streamlit、streamlit-aggrid以及plotly模块,先通过pip命令将这些模块下载下来,其中streamlit-aggrid主要是将数据表能够呈现在页面上
pip install streamlit-aggridpip install plotly
页面的结构整体页面的结构是左边有一个工具栏,包含了该网页的一些简短介绍、以及一个希望使用者评分和反馈的模块
而右边则的section1是项目规划文件的模板样式,主要是在csv文件当中写清楚任务的细节,包括任务名称、任务描述、开始与结束时间等等内容。section2则是允许用户上传自己的csv文件,修改csv文件中项目的内容以及一个可视化的呈现,而section3则是将上述的内容导出至html文件当中去
代码部分下面便是该页面的代码部分
from st_aggrid import aggridimport streamlit as stimport pandas as pdimport numpy as npimport plotly.express as pxfrom pil import imageimport 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('<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('您的评分是:') st.markdown(rating) st.markdown('您的反馈是:') st.markdown(text)
结果如下图所示
主页面的开发-section 1接下去便是主页面的section 1部分的开发,主要是展示项目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_datadef 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', )
我们提供了下载按钮可以让用户一键下载模板文件,最后呈现的样子是这样的
主页页面的开发-section 2接下去便是上传我们自己的csv文件,这里我们用到了streamlit_aggrid模块,该模块的好处就在于可以对数据表进行一个展示,并且可以对其中的数据进行修改,
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
接下去便是对数据的可视化呈现了,这里是用plotly模块来绘制甘特图,我们可以选择是以团队的维度来绘制或者是以项目完成的进度来绘制,代码如下
st.subheader('第三部:绘制甘特图')options = st.selectbox("以下面哪种维度来绘制甘特图:", ['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) # 绘制甘特图至页面上 st.subheader( 'bonus: 导出至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('---')
以上就是python如何实现甘特图绘制?的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product