类似gitlab代码提交的热力图怎么做?
本文由 网易云发布。
作者:张淞(本篇文章仅限知乎内部分享,如需转载,请取得作者同意授权。)
昨夜,网易有数产品经理路过开发的显示屏前见到了类型这样的一张图:

于是想到有数能不能做出这样的图来?作为有数的开发的我在一边思索了一下,开了一下脑洞,结合最近做的网易有数的新功能,觉得可以实现,于是就开始做一张。
首先,我们需要看上图的x轴与y轴分别是什么,x虽然显示的是月份,但是实为日期轴,而且是日期映射为“年-周”的日期轴,而且这些日期是有时间范围的,这意味着我们需要添加日期筛选器。而这里的y轴则是“星期”(day of week)。这里我们使用最常用的超市订单数据源来尝试一下做出这样一张图表。
先插入一个“图表”控件,先来完成放置x与y轴的工作。

我们把年放到X轴上,选择年周日期映射函数,由于超过了200列,我们可以为它来添加一个筛选器,把订单日期放入筛选器后点击左下角的更多日期筛选方式,并用列表筛选,选择2011。
下一步把订单日期再拖放到Y轴上,并选择日期(星期)日期映射函数。这样在Y轴上就得到了1到7,表示一周7天的轴。

这里,有数把这种图表自动推断为表格,而不是小方块,这是由于全部属性面板中的图表类型为自动,网易有数认为这种情形下表格最好。我们可以把全部属性中的“自动”改为“并列柱状图”,于是就得到了下面的图:

我们可以调整下下图表控件的调度来让里面的柱子变成正方形:

可以看到这些小方块的颜色是没有深浅的,这是因为什么的,这是因为颜色并不并未任何的度量,因为gitlab中小方块图的颜色是表示提交数的,所以“全部属性”面板的颜色上应该有一个度量,这里我们可以把订单中的数据拖入“颜色”中:

可以看到我们之前的控件大小被左上角的数量的图例破坏了,为了把它去掉,我们可以在“图表”面板“样式”的tab中把图例前的对勾去掉,另外原图中也没有轴线,在样式中也可以调整为透明色或者白色:

这些交互在图表的绘制区是没有交互的,未来如果有数中如果加入使用的体验会更好。于是这张图就成了这个样子:

现在看看与gitlab的图相比还有没有什么不同?首先这里是有轴名称的,就是上面的年周(订单日期)还有左边的星期(订单日期),只要双击图表进入编辑页面后在相应的区域中右键选择“隐藏名称”就可以做到这一点。(窃以为这里的方案应该改成隐藏轴名称才好)。另外就是标题的隐藏,就是那行“数量(按星期(订单日期)、年周(订单日期)划分)”,这个的设置在“样式”tab里中的第一行。好了,下面这张图表就变成了:

还有几处不一样,一个是方块的颜色,这个只需要在“颜色”面板中设置即可,另外不一样的地方就是X轴的格式,这一格式可以在X轴订单日期胶囊的日期显示格式中选择,然而,这一列表中并没有提供英文月份的选项。但是由于背后处理日期格式的部分是我做的,实质上我们的服务器是支持这种月份的,只需要把格式改成MMM即可,由于我是有数的开发,这里先用我们有数中隐藏的“上帝模式来做到这一点”,于是就得到了:

可是还是没有办法对于一个月份只显示一个,这里需要配置步长,但是我们并没有开放这一入口,所以无法做到一模一样。另外就是左侧轴的问题,星期的格式不是英文的首字母以及一周的开始不是星期日而是星期一,这一点在产品设计的时候也有讨论过,未来也许可以考虑让用户设置。首字母的这一点可以使用计算字段来完成,但是略有麻烦,这个计算字段如下:
IF DAYOFWEEK([订单日期]) = 1 THEN "Mon"
ELSE IF DAYOFWEEK([订单日期]) = 2 THEN "Tue"
ELSE IF DAYOFWEEK([订单日期]) = 3 THEN "Wed"
ELSE IF DAYOFWEEK([订单日期]) = 4 THEN "Thu"
ELSE IF DAYOFWEEK([订单日期]) = 5 THEN "Fri"
ELSE IF DAYOFWEEK([订单日期]) = 6 THEN "Sat"
ELSE IF DAYOFWEEK([订单日期]) = 7 THEN "Sun"
但是,但是,由于目前的有数不支持自定排序,只支持字母序,所以Fri会排在第一个,Mon会排在第二个,Wed会在最后。本质上这里应该是一个日期的数据字典,但是这一日期加了日期映射函数,对于这种数据字典的设置有些问题,所以目前也无法满足这里的需求。
总结:
从上面的过程来看,有数对于制作图表的功能还是十分强大的,因要照猫画虎做一些图表还是能做到八九不离十的,这里的热力图就印证出了这一点,它是通过各种数据胶囊的放置与样式的配置来得到的。但是在一些细节上,比如隐藏轴名称,标题名称等配置入口还需要综合整理,加入月份的日期格式或是开放让用户自行配置,日期的步长值也需要开放让用户配置。此外就是自定义排序的设置以及更加强大的数据字典等功能,这些细节真的是需要长时间细细的打磨。
看完这篇文章,是不是想自己试试看呢,快来吧网易有数 - 网易大数据|专业的私有化大数据平台
了解 网易云 :
网易云官网:https://www.163yun.com/
新用户大礼包:https://www.163yun.com/gift
网易云社区:https://sq.163yun.com/
类似gitlab代码提交的热力图怎么做?的更多相关文章
- 再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三(走过路过不要错过)
Gitlab runner 快速搭建CICD pipeline 背景 日常开发中,相信大家已经做了很多的自动化运维环境,用的最多的想必就是利用Jenkins实现代码提交到自动化测试再到自动化打包,部署 ...
- Jnekins+Gitlab代码提交全程配置
实验环境: 测试机:192.168.2.156 Jenkins:192.168.2.157 Gitlab:192.168.2.158 温馨提示:如果不知道,Jenkins和Gitlab安装过程~可参考 ...
- 小玩意儿之Gitlab 代码提交日志同步到禅道项目管理系统
以前都是使用禅道官方推荐的服务器本地扫描的方式,但其实不太方便,需要跟着项目的变化,不断的在配置文件维护项目相应仓库的配置. 然后现在Web Hooks越来越普遍的情况下,想尝试一种新的方式.看了禅道 ...
- 配置gitlab代码提交之后自动触发jenkins
https://www.cnblogs.com/bugsbunny/p/7919993.html
- Gitlab源码库里代码提交后,如何触发jenkins自动构建?
版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...
- Gitlab与Sonarqube整合-代码提交自动检测
目录 概述 准备工作 postgres sonarqube gitlab gitlab-runner Gitlab-runner容器 注册Gitlab-runner Sonarqube gitlab ...
- 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具
本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 最近接个任务,用webhook做了个代码提交监听功能,就是有人 ...
- git 操作 :从远程仓库gitLab上拉取指定分支到本地仓库;git如何利用分支进行多人开发 ;多人合作代码提交实践
例如:将gitLab 上的dev分支拉取到本地 git checkout -b dev origin/dev 在本地创建分支dev并切换到该分支 git pull origin dev 就可以把git ...
- 有手就行——Jenkins介绍 及 Gitlab代码托管服务器安装
Jenkins 介绍 及 Gitlab代码托管服务器安装 Gitlab安装 源码上传到Gitlab仓库 Jenkins介绍 Jenkins 是一款流行的开源持续集成(Continuous Integr ...
随机推荐
- struct to point
关键知识点:结构体--新数据类型定义及结构体变量的定义与初始化, 结构体指针变量的定义及相关应用. 结构体变量作函数参数 指向结构体变量的指针变量. 数组与结构体间的渊源始末, 当一个整体由多个数据构 ...
- 102. Binary Tree Level Order Traversal + 103. Binary Tree Zigzag Level Order Traversal + 107. Binary Tree Level Order Traversal II + 637. Average of Levels in Binary Tree
▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ ...
- Discuz 任务、道具、任务和验证类插件制作
一.广告类脚本位置:source/class/adv/adv_name.php语言包位置:source/language/adv/lang_name.php <?php class adv_na ...
- python中numpy计算数组的行列式numpy.linalg.det()
numpy.linalg.det numpy.linalg.det(a)[source] 计算任何一个数组a的行列式,但是这里要求数组的最后两个维度必须是方阵. 参数: a : (..., M, M) ...
- css继承和层叠
在前面介绍了如何利用文档结构和css选择器为元素应用各种丰富的样式,今天来好好聊聊css的层叠和继承,先说说概念. 继承:一个元素向其后代元素传递属性值所采用的机制,说的通俗点,就是元素的某些属性可以 ...
- shell脚本通过expect脚本实现自动输入密码
背景:在远程文件下载时,需要输入对方的服务器密码,shell不支持交互输入内容,可以用下面两种方式实现 一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具 ...
- UNITY_INITIALIZE_OUTPUT宏
UNITY_INITIALIZE_OUTPUT宏 UNITY_INITIALIZE_OUTPUT(type,name) –此宏用于将给定类型的名称变量初始化为零.在使用旧版标准所写的Shader时,经 ...
- Golang之继承,多重继承(struct)
热乎的代码来了 package main import "fmt" /* 继承 一个结构体嵌到另一个结构体,称作组合 匿名和组合的区别 如果一个struct嵌套了另一个匿名结构体, ...
- c++ stringstream的使用
stringstream ss;//一次创建多次使用,需要进行clear()操作清除流状态标记 int i=0; while (i<3) { ss<<"21"; ...
- 2.QWidget类
简述: QWidget类是所有用户界面对象的基类. Widget是用户界面的基本单元:它从窗口系统接收鼠标,键盘和其他事件,并在屏幕上绘制自己. 每个Widget都是矩形的,它们按照Z-order进行 ...