欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

plotly之甘特图绘制

程序员文章站 2024-01-20 19:17:04
...

应用场景

时间顺序的数据分析往往需要用到甘特图,比如骑手出勤的时间分析,商户出餐的时间分析等等

plotly有一个专门绘制甘特图的模块figure_factory.create_gantt(),可以很方便地绘制甘特图。

函数参数说明

plotly.figure_factory.create_gantt(dfcolors=Noneindex_col=Noneshow_colorbar=Falsereverse_colors=Falsetitle='Gantt Chart'bar_width=0.2showgrid_x=Falseshowgrid_y=Falseheight=600width=Nonetasks=Nonetask_names=Nonedata=Nonegroup_tasks=Falseshow_hover_fill=True)

Parameters

  • df ((array|list)) – 绘图数据,一般为dataframe或者列表,数据必须包含 ‘Task’, ‘Start’ and ‘Finish’三列,如果不是这些列,需要重命名列

  • colors ((str|list|dict|tuple)) :甘特图的颜色,可以是rgb格式,‘rgb(x, y, z)’,x/y/z0~255。 

  • index_col ((str|float)) –同一个Task下甘特图的不同阶段,通常用不同颜色区分

  • show_colorbar ((bool)) – 是否显示图例

  • show_hover_fill ((bool)) – 是否显示甘特图数据信息

  • reverse_colors ((bool)) –

  • title ((str)) – 图表名称

  • bar_width ((float)) – 甘特条形图宽度

  • showgrid_x ((bool)) – 显示x轴grid线

  • showgrid_y ((bool)) – 显示x轴grid线

  • height ((float)) – 绘图的高度

  • width ((float)) – 绘图的宽度

绘图步骤

1. 将数据整理为Task,Start,Finish的格式,然后将对应的列重命名为Task,Start,Finish,将Start,Finish转换为时间格式,如将数据整理为下列格式,其中courier为Task,start_min为Start,end_min为Finish,status为Task的进程状态

courier_id team_id status start_minute end_minute
181359707 17446267 online_no_work 17:15 17:30
181359707 17446267 online_no_work 17:30 17:45
181359707 17446267 online_work 17:45 18:00
181359707 17446267 online_work 18:00 18:15
181359707 17446267 online_no_work 18:15 18:30
181359707 17446267 online_no_work 19:00 19:15
# 数据重命名,将对应的列名改为Task,Start,Finish
col_rename={'courier_id':'Task','start_minute':'Start','end_minute':'Finish'}
df = df.rename(columns=col_rename)

# 格式转换,需要将Start和Finish列转换为时间格式
df['Start'] = pd.to_datetime(df_riderAttend_forgatt['Start'],format='%H:%M')
df['Finish'] = pd.to_datetime(df_riderAttend_forgatt['Finish'], format='%H:%M')


2. 利用代码绘图

team_id = '17431669'
ds = '20201013'

import plotly.figure_factory as ff

# 取数据子集进行绘图
df_plot = df[(df_riderAttend_forgatt['team_id']==team_id) & (df['ds']==ds)].sort_values(by='Start')

# 设置任务不同状态对应绘图颜色
colors = {'online_work': 'rgb(0, 200, 0)',
          'offline_work': 'rgb(0, 150, 87)',
          'break_work': 'rgb(127, 200, 0)',
          'online_no_work': 'rgb(200, 0, 0)',
         'offline_no_work': 'rgb(255, 205, 0)',
         'break_no_work': 'rgb(200, 100, 0)'
         }

fig = ff.create_gantt(df,showgrid_x=True,colors=colors,index_col='status',show_colorbar=True,group_tasks=True)
fig.show()

# 导出图片,需要按照3个包才能使用次命令导出图片
fig.write_image('image/txd_team.pdf')

结果如图所示 

plotly之甘特图绘制

关于图像导出

plotly的图像并不能使用plt.save_fig()的方式导出,因为其图像是基于html格式。如果对图像质量要求不高,可以截图或者点击右上角对“相机”图表,可以导出为png格式。

但如果对图像分辨率要求较高,则需要使用命令导出,在此之前需要安装3个包:orca,psutil, requests

安装方法也非常简单,在命令终端窗口输入如下命令(orca必须使用conda命令进行安装)

conda install -c plotly plotly-orca

pip install psutil requests