前几天,有小伙伴在后台问我,能否发一篇关于热图日历的文章,并用R软件制作了一张示例图供我参考(见下图)。经过一段时间学习,算是基本摸清了热图日历的制作方法及步骤,这里写出来与大家进行分享和交流。
热图日历:顾名思义,就是用日历形式对数据进行热图类型可视化,常用于查看较长一段时期,如整个年度或数个月度,每天的数值变化情况。
对于热图日历,我个人觉得根据难度可以分为三种类型,本文按照由易到难的顺序,对三种类型创建步骤逐一记录,这三种类型具体如下:
- 月度热图日历
- 年度热图日历
- 年度热图日历(带月标签)
这里使用上海市2014年空气质量指数(AQI)数据集,创建上海2014年AQI热图日历。
月度热图日历
月度的热图日历比较简单,总体思路是对月度时间进行筛选,然后在视图中创建单月日历,最后对该日历进行热图可视化。
筛选月份
将“日期”字段拖放到“筛选器”卡,在弹出的对话框中选择“年/月”,然后再选择任意一个时间,这里选择的是“2014年1月”。
创建单月日历
Step01 设置"星期"。将“日期”字段拖放到“列”功能区,并在该字段上通过鼠标右键选择“工作日”,即可完成“星期”的显示。
Step02 设置周数。将“日期”字段拖放到“行”功能区,并在该字段上通过鼠标右键选择“周数”,即可完成周数的显示。
Step03 检查显示结果。完成上面两步后,视图中出现了2014年1月份的日历,为核对该日历是否显示准确,可以将“日期”字段拖放到“标记”卡的“文本”,并将该字段设置为“天”。可以看到,视图已经正确显示出了2014年1月份的周数、星期和具体日期。
需要注意的是,tableau默认的每周开始时间是“周日”,结束时间是“周六”,与我们日常习惯不太一致。
我们更习惯以“周一”作为每周开始时间,“周日”作为结束时间,因此,需要对tableau的默认显示方式进行设置,具体路径是:“数据”菜单→当前数据表→“日期属性”选项,如下所示:
然后,在弹出的“日期属性”窗口中,将“周开始”设置为“星期一”即可。
Step04 可视化空气质量指数。
- 将标记类型设置为“方型”
- 移除“标记”卡中,用于测试的“日期”字段,
- 将度量区的“AQI”字段拖放到“标记”卡的“颜色”
这里可以根据使用习惯,将AQI的热图颜色进行自定义编辑,具体设置内容如下图:
最终形成的单月热图日历如下所示:
年度热图日历
上面创建的是单月热图日历,如果要显示全年的热图日历,则需要对“列”和“行”功能区的字段进行补充和设置。
移除上图“筛选器”卡中的“日期”字段,再拖放一个“日期”字段到“列”功能区的“工作日(日期)”字段前面,视图则会将2014年的每一周及每一天显示出来,如下图所示:
如果要进一步区别月度情况,则可以拖放一个“日期”字段到“行”功能区的“周(日期)”字段前面,并设置为“月(日期)”,所得视图如下所示:
如果还想创建更一目了然的布局,比如横向显示三个月份,纵向显示四个季度,则需要通过计算字段来实现,具体步骤如下:
Step01 创建“列索引”字段。该字段用于对月度进行分组。
“列索引”:
CASE MONTH([日期])
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 3
WHEN 4 THEN 1
WHEN 5 THEN 2
WHEN 6 THEN 3
WHEN 7 THEN 1
WHEN 8 THEN 2
WHEN 9 THEN 3
WHEN 10 THEN 1
WHEN 11 THEN 2
WHEN 12 THEN 3
END
Step02 创建“行索引”字段。该字段用于对周数进行索引。
“行索引”:
FLOAT(DATEPART(‘week’, [日期])-{FIXED DATEPART(‘month’, [日期]):MIN(DATEPART(‘week’, [日期]))})
Step03 生成日历。
- 将“列索引”字段替换掉“列”功能区的“年(日期)”字段
- 将“行索引”字段替换掉“行”功能区的“周(日期)”字段
- 将“列”功能区的“月(日期)”字段设置为“季度(日期)”
Step04 设置可视化格式。
- 消除“行索引”、“列索引”、“季度(日期)”字段的标题
- 隐藏列字段标签
- 设置边界
- 设置网格线,等等
最终形成的热图日历如下所示:
年度热图日历(带月标签)
通过上面的步骤,年度热图日历基本具备了一目了然的布局,但如果还想在视图中,为每一个月份的日历增加一个对应的月度标签,让月份识别更为直观,则还要对上面的视图进一步优化。
以实践而言,增加月度标签的需求看似简单,步骤却比较多,操作较为繁琐,应该算是热图日历创建过程中,技巧性比较高的内容。
这里接着已经创建完成的年度热图日历示例3(见上图),分步描述添加月份标签的具体步骤。
Step01 处理“行索引”字段。通过鼠标右键,将“行”功能区的“行索引”字段转换为“连续”,然后编辑“行索引”坐标轴,设置“倒序”。
Step02 拖放“记录数”字段。将“度量”区的“记录数”字段拖放到“标记”卡的“大小”,并将聚合方式改为“平均值”。
Step03 设置“标签”。点击“标记”卡的“标签”,勾选“允许标签覆盖其他标记”选项,并将垂直方向的对齐方式设为“居中”。
Step04 改变图形样式。将图形样式改为“甘特条形图”,并将“大小”拖放到最大位置。
Step05 调换横轴位置。将位于视图下方的横轴调换到视图上方位置,在这里就是要将位于视图下方的“星期”标题显示在视图上方。
- 具体路径“分析”菜单→“表布局”→“高级”
- 在弹出的“表选项”窗口中,取消“当存在垂直轴时在视图底部显示最内部级别”选项。
Step06 创建计算字段。创建“周标记”计算字段,用于设置月标签与月度日历的相对位置。其中,“5”和“-1.0”两个数字可以根据需要调整。
周标记:
IF DATEPART(‘weekday’, [日期])=5 THEN -1.0 END
Step07 设置坐标轴。
- 将“周标记”计算字段直接拖放到视图右侧,生成次坐标轴。
- 将维度区的“行索引”字段数据类型转换为“数字(十进制)”。
- 对“周标记”坐标轴设置“同步轴”。
- 检查“行索引”轴是否为“倒序”,如果不是,则要进行勾选。
Step08 设置标记。对“标记”卡区域中的“周标记”窗口相关字段进行设置。
- 移除“AQI”和“记录数”字段
- 将标记类型改为“文本”
- 将“天(日期)”字段改为“月(日期)”
Step09 更改字段聚合方式。将“行”功能区“周标记”字段的聚合方式更改为“平均值”。
Step10 设置可视化格式。
- 隐藏视图右下方的NULL值
- 消除“行索引”、“列索引”等字段的标题
- 设置边界、网格线,等等
经过以上步骤,最终形成的热图日历如下所示:
(全文完)