可视化神器Plotly玩转甘特图
本文介绍的是一种特殊的柱状图:甘特图,虽然在实际工作中使用的几率较小,还是很有必要和兴趣来学习下,将制作过程分享给大家。
扩展阅读
Plotly的文章会形成连载系列,前面7篇Plotly可视化文章分别是:
- 酷炫!36张图爱上高级可视化神器Plotly_Express
- Plotly玩转散点图
- Plotly玩转饼图
- Plotly玩转漏斗图
- Plotly玩转柱状图
- Plotly玩转气泡图
- Plotly玩转股票图
什么是甘特图
甘特图最初绘制是基于时间线轴timeline
的,用来表示一个项目的进度。甘特图依赖于两种数轴表示:
- 垂直轴(纵轴):指定需要执行的任务
- 水平轴(横轴):列出每个任务的执行时间段
在甘特图的柱状图中,每个水平条的宽度显示的是任务执行需要的时间
甘特图的发明者(1910-1915期间发明):亨利.甘特👍
导入库
文章绘图使用的是plotly_express和plotly中的图形工厂函数figure_factory方法
1 | import pandas as pd |
基于px实现
基础图形
通过字典的方式生成一份模拟数据:
1 | df = pd.DataFrame([ |
绘图的基本代码如下;甘特图的绘制是基于时间线timeline的,主要参数是:
- 绘图数据
- 开始时间
- 结束时间
- 纵轴数据
1 | fig = px.timeline( |
如果不翻转的效果如何:最终发现y轴显示的标签顺序发生了变化
1 | fig = px.timeline( |
修改颜色
上面的图形颜色是plotly自带的,可以通过数值和字符改变颜色,模拟一份新的数据:
1 | df1 = pd.DataFrame({ |
传入字符类型的参数改变颜色:
1 | fig = px.timeline( |
如果y轴和颜色是相同的取值:
1 | fig = px.timeline( |
通过数值型参数改变颜色
1 | df2 = pd.DataFrame({ |
结果为:
1 | 任务 开始时间 结束时间 完成度 |
绘图代码如下:
1 | fig = px.timeline( |
基于图形工厂实现
为什么有图形工厂
The
plotly.figure_factory
module contains dedicated functions for creating very specific types of plots that were at the time of their creation difficult to create with graph objects and prior to the existence of Plotly Express.在Plotly_Express存在之前,图形工厂函数用于创建那些基于go很难生成的图形
As new functionality gets added to Plotly.js and to Plotly Express, certain Figure Factories become unnecessary and are therefore deprecated as “legacy”, but remain in the module for backwards-compatibility reasons.
随着一些新的功能被添加到Plotly.js和Plotly_Express中,某些工厂函数变得不是很必要;但是为了向后兼容版本,部分还是保留在模块中
The following types of plots are still difficult to create with Graph Objects or Plotly Express and therefore the corresponding Figure Factories are not deprecated(弃用):
因为px或者go方法还是很难创建某些图形,所以建议还是使用图形工厂:
- Annotated Heatmaps:带注释的热图
- Dendrograms:树状图
- Hexagonal Binning Tile Map:六边形平铺地图
- Quiver Plots:箭头点图
- Streamline Plots:流线点图
- Tables:表格
- Ternary Contour Plots:三元相图
- Triangulated Surface Plots:三角面点图
不推荐使用的工厂函数制作的图形:
- County Choropleth Maps:地理区域断层图
- Distplots:直方图
- Gantt Charts:甘特图
基础绘图
模拟生成一份数据:
1 | data = pd.DataFrame([ |
绘图的代码:
1 | fig = ff.create_gantt(data) |
工厂函数生成的甘特图可以进行时间段的选择,上图默认是所有的统计时间范围。
改变颜色
使用的是模拟的数据:
1 | fig = ff.create_gantt( |
多组甘特图
将不同类型的数据分组放在一个甘特图中:
1 | data1 = pd.DataFrame([ |
绘图代码如下:
1 | colors_data1 = { |
总结
甘特图是一种使用频率,相对于柱状图、饼图等较低的图形,它有自己的特殊使用场景,在项目进度展示的场景尤其适合,也适合任务计划的制作。