数据可视化之下发图实践

作者:个推前端工程师 东风

随着互联网的快速发展,数据维度越来越广,呈现形式也越发丰富,具有多维度数据特点的相关业务实践都能通过可视化图表来展示,比如个推的下发图,从时间和区域两个维度,可以即时、直观地展现个推数据下发的过程。

一、下发图的由来

个推下发图主要用于呈现个推为APP提供推送服务时数据的下发过程,可以直观显示个推推送触达到的城市,有利于开发者对下发数据进行分析。

个推下发图运用了迁徙图的原理,再通过自主设计开发出的一套可视化展示图像。这一类型的可视化可以广泛应用于拥有地理位置信息和数据转移特征的数据展示。

二、下发图的构成

下发图主要由地图、地理位置信息,以及飞线组成。如下图所示:

三、下发图的技术要点

1.地图
地图可以利用第三方地图服务,也可以自主绘制地图,本文以后者为例。自主绘制的地图主要利用了墨卡托投影原理,将地球正轴圆柱投影,由经纬度信息转化到画布上对应的位置。

本文案例中用了 d3.js 中的 geoMercator 进行墨卡托投影转换。

然后我们可以在阿里云的 datav 中获取地图的 geojson 数据,具体地址可参见括号内链接,(https://datav.aliyun.com/tools/atlas )再通过 canvas 原生 Api,添加背景色、边框等,就可以画出想要的地图了。

注意:下图中的地图角度透视主要应用了 css 中的 transform,perspective、rotateX、rotateY、rotateZ 等。

遵循上述步骤,一个透视角度的静态地图就绘制完成了。

2.贝塞尔曲线
贝塞尔曲线是计算机图形学中相当重要的参数曲线,它通过一个方程来描述一条曲线,根据方程的最高阶数,又分为线性贝塞尔曲线、二次贝塞尔曲线、三次贝塞尔曲线和更高阶的贝塞尔曲线。

本案例中主要应用了二次贝塞尔曲线,二次贝塞尔曲线的函数如下:
B(t) = (1-t) 2P0 + 2t(1-t)P1 + t2P2, t ∈ [0,1]


上图为本文案例中飞线的贝塞尔曲线应用,其中 from 为起点,to 为终点,curveness 为曲线的曲率,取值-1 ~ 1,曲率的绝对值越大,曲线越弯曲,percent为飞线位置占比。

3.动画
在 canvas 中,动画效果的实现通常是由 window.requestAnimationFrame 循环执行,因此,飞线需要算出每一帧中飞线的状态,以及飞线的入场和离场形态。

4.发光效果
那么下发图的特效具体如何实现呢?首先我们来介绍一下头部发光效果的实现过程:

我们以工业中的HSL色彩模式为颜色标准,通过对色相(H)、饱和度(S)、明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,HSL即代表色相、饱和度、明度三个通道的颜色,这一标准几乎包括了人类视力所能感知的所有颜色。以此为依据,可以发现光源的发光规律,即光源中心的明亮度最高,由内向外,明亮度依次递减。

所以根据配置的基础颜色,就能获取到顶点发光处颜色的明亮度,大致方法如下:

完成头部发光步骤后,接下来需要打造一个酷炫的形状。发光的头部是一个类似棉签棒的形状,该形状可以用一个半圆和一个三角形来绘制,再根据曲线的切线,获取三角形以及半圆的旋转角度。

完成下发图头部制作后,接下来需要进行尾部的操作,因为canvas自带线性渐变,所以具体代码如下:

canvas 的落地效果呈圆形渐变样式,当飞线到达终点后,完整的落地效果就开始展示,整个画面类似雨滴降落到地面。

5.透视
如果不调整透视角度,贝塞尔曲线的样式如下图所示:

当曲线与下发方向的角度呈90度时,曲率最大;角度为0度或者180度时,曲率最小,与余弦定律相似。

其中 from 是起始位置,to 是终止位置,curveness 是曲线的曲率,angel 是视线的角度。

最终效果如下:

四、技术选型

在进行下发图的技术选型时,个推技术团队对比了 svg 和 canvas 两种技术栈,最后选择了 canvas,然后配合 requestAnimationFrame 画出下发轨迹的帧动画。两款技术栈的具体性能对比如下:

五、总结

随着数据维度的扩展和丰富,数据可视化的形态日渐丰富。作为地理位置信息和数据转移特征的数据可视化图表,下发图可以更直观地展现个推为APP提供推送服务时的下发量、下发区域等数据,对APP的行业分析以及战略调整有着指导性意义。

原文地址:https://blog.51cto.com/13031991/2380519

时间: 2024-10-06 06:58:36

数据可视化之下发图实践的相关文章

第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

前言 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_line()便可绘制出基本折线图.R语言示例代码如下: # 基函数 ggplot(BOD, aes(x = Time, y = demand)) + # 折线图函数 geom_line()     运行结果: 向折线

基于matplotlib的数据可视化 - 三维曲面图gca

1 语法 ax = plt.gca(projection='3d')ax.plot_surface(x,y,z,rstride=行步距,cstride=列步距,cmap=颜色映射) gca(**kwargs) 在当前图像上,获取与给定关键字args匹配的当前Axes的当前Axes实例,若不存在,则会返回一个新创建的实例. 帮助文档中的一个示例 plt.gca(projection='polar') If the current axes doesn't exist, or isn't a pol

CSDN开源夏令营 百度数据可视化实践 ECharts(6) 期中总结

期中总结 (1)首先感谢林峰老师的辛勤指导!! 通过半个多月的培训,林峰老师讲解了ECharts总体框架和其中各个部分:图类.组件.接口.基础库的具有应用方法和应该把握的细节,并通过实际的例子熟悉和掌握各个控件.只有打牢基础才能正正的为下步的工作做好准备,熟练的属性代码的编程技巧,才能做出更好的专题. (2)第一次任务重点总结: 要求:了解ECharts特性中列举的每一项特性,并能找到实例中的例子,并且在实例中操作. 重点问题: 1)ECharts一种支持多少种图表?有多少个组件?列举出中英文名

CSDN开源夏令营 百度数据可视化实践 ECharts(1)

总体规划 (1)选题: 通过了解林峰老师的专题中国主要城市空气质量实况.中国经济十年时空漫游和中国人口流动大潮,涉及了人口.经济和民生等方面的内容,在这里我选择中国高考,作为我的切入点. 高考,一个永恒的话题,是一场你我都值得经历的一场无硝烟的战争.有人曾说:每个高考的孩子都背负着几代人的希望,每个高考的背后都有众多关注的眼睛.人生能有几回搏?虽然失去了许多,但终究会收获很多. (2)题目 2006-2014高考各省市报名人数及录取人数汇总专题 (3)搜集数据资料 工欲善其事,必先利其器.数据的

CSDN开源夏令营 百度数据可视化实践 ECharts(4)

ECharts知识点总结: 在应用过程中总会遇到一些难以理解的概念和属性,这里就总结了一下比较难的知识点,方便理解概念,进而更好的掌握ECharts. (1)1.  一个完整的option包含什么?可以归纳为几类? 下图中颜色已经区分出了三类分别是:公共选项 , 组件选项 , 数据选项 名称 描述 {color}backgroundColor 全图默认背景,(详见backgroundColor),默认为无,透明 {Array} color 数值系列的颜色列表,(详见color),可配数组,eg:

CSDN开源夏令营 百度数据可视化实践 前言

首先要非常感谢林峰老师,谢谢林峰老师选择我.@Kener-林峰 (1)接下来我要讲述一下百度的数据可视化组件ECharts和ZRender. 众所周知,大数据时代的到来,不仅带来了挑战更带来了机遇,但这仅仅是一个一个开始,大数据时代将会对我们的生活产生重大的影响.正如<大数据时代>的作者维克托 · 迈尔 - 舍恩伯格说的"如今,数据已经成为了一种商业资本,一项重要的经济投入,可以创造新的经济利益.事实上,一旦思维转变过来,数据就能被巧妙地用来激发新的产品和新型服务.数据的奥秘只为谦逊

陈为著《数据可视化》书评及思维导图

在确定数据可视化为自己研究主题之初,我经常上网搜寻相关资料.但是初期的收集经常是杂乱无章,缺乏系统规划的.以至于我产生了三个困扰我的问题,分别是: 1. 信息可视化与数据可视化,到底有什么区别?或者说infographics 与visualization之间有何区别? 2.data visualization就是数据挖掘之后的用于显示结果的统计图吗? 3.曾经在知乎上看见某资深程序员直言,数据可视化在国内除了折腾一下社交网络外,没什么好做的,是这样吗? 今年4月以来,我终于有时间仔细研究相关问题

CSDN开源夏令营 百度数据可视化实践 ECharts(3)

Echarts  仪表盘 这里主要讲一讲series(仪表盘)的用法,驱动图表生成的数据内容数组,数组中每一项为一个系列的选项及数据 功能丰富,可以做出很漂亮的东西来. (1)首先讲一下仪表盘的基本属性 其中最常用的属性: center 圆心坐标,支持绝对值(px)和百分比,百分比计算min(width,height)*50%,radius 半径大小,支持绝对值(px),百分比计算. radius:半径属性,可以调控半径的大小,支持绝对路径和百分比. (2)全部属性: 名称 默认值 描述 {Ar

【Python爬虫学习实践】基于Beautiful Soup的网站解析及数据可视化

在上一次的学习实践中,我们以Tencent职位信息网站为例,介绍了在爬虫中如何分析待解析的网站结构,同时也说明了利用Xpath和lxml解析网站的一般化流程.在本节的实践中,我们将以中国天气网为例,并基于Beautiful Soup库对其进行数据解析,最后再简单说明pyecharts数据可视化. 中国天气网网址:http://www.weather.com.cn/textFC/hb.shtml 和之前的Tencent职位信息实践一样,我们先来分析一下我们所爬取的网站的结构.在中国天气网中,我们可