ECharts GL (后面统一简称 GL)为 ECharts 补充了丰富的三维可视化组件,这篇文章我们会简单介绍如何基于 GL 实现一些常见的三维可视化作品。实际上如果你对 ECharts 有一定了解的话,也可以很快的上手 GL,GL 的配置项完全是按照 ECharts 的标准和上手难度来设计的。

如何下载和引入 ECharts GL

为了不再增加已经很大了的 ECharts 完整版的体积,我们将 GL 作为扩展包的形式提供,和诸如水球图这样的扩展类似,如果要使用 GL 里的各种组件,只需要在引入echarts.min.js的基础上再引入一个echarts-gl.min.js。你可以从 官网 下载最新版的 GL,然后在页面中通过标签引入:

如果你的项目使用 webpack 或者 rollup 来打包代码的话,也可以通过 npm 安装后引入

npm install echarts

npm install echarts-gl

// 通过 ES6 的 import 语法引入 ECharts 和 ECharts GL

import echarts from 'echarts';

import 'echarts-gl';

声明一个基础的三维笛卡尔坐标系

引入 ECharts 和 ECharts GL 后,我们先来声明一个基础的三维笛卡尔坐标系用于绘制三维的散点图,柱状图,曲面图等常见的统计图。

在 ECharts 中我们有 grid 组件用于提供一个矩形的区域放置一个二维的笛卡尔坐标系,以及笛卡尔坐标系上上的 x 轴(xAxis)和 y 轴(yAxis)。对于三维的笛卡尔坐标系,我们在 GL 中提供了 grid3D 组件用于划分一块三维的笛卡尔空间,以及放置在这个 grid3D 上的 xAxis3D, yAxis3D, zAxis3D。

小提示:在 GL 中我们对除了 globe 之外所有的三维组件和系列都加了 3D 的后缀用以区分,例如三维的散点图就是 scatter3D,三维的地图就是 map3D 等等。

下面这段代码就声明了一个最简单的三维笛卡尔坐标系

var option = {

// 需要注意的是我们不能跟 grid 一样省略 grid3D

grid3D: {},

// 默认情况下, x, y, z 分别是从 0 到 1 的数值轴

xAxis3D: {},

yAxis3D: {},

zAxis3D: {}

}

效果如下:

跟二维的笛卡尔坐标系一样,每个轴都会有多种类型,默认是数值轴,如果需要是类目轴的话,简单的设置为 type: ‘category’就行了。

绘制三维的散点图

声明好笛卡尔坐标系后,我们先试试用一份程序生成的正态分布数据在这个三维的笛卡尔坐标系中画散点图。

下面这段是生成正态分布数据的代码,你可以先不用关心这段代码是怎么工作的,只需要知道它生成了一份三维的正态分布数据放在data数组中。

function makeGaussian(amplitude, x0, y0, sigmaX, sigmaY){

return function (amplitude, x0, y0, sigmaX, sigmaY, x, y){

var exponent = -(

( Math.pow(x - x0, 2) / (2 * Math.pow(sigmaX, 2)))

+ ( Math.pow(y - y0, 2) / (2 * Math.pow(sigmaY, 2)))

);

return amplitude * Math.pow(Math.E, exponent);

}.bind(null, amplitude, x0, y0, sigmaX, sigmaY);

}

// 创建一个高斯分布函数

var gaussian = makeGaussian(50, 0, 0, 20, 20);

var data = [];

for (var i = 0; i < 1000; i++) {

// x, y 随机分布

var x = Math.random() * 100 - 50;

var y = Math.random() * 100 - 50;

var z = gaussian(x, y);

data.push([x, y, z]);

}

生成的正态分布的数据大概长这样:

[

[46.74395071259907, -33.88391024738553, 0.7754030099768191],

[-18.45302873809771, 16.88114775416834, 22.87772504105404],

[2.9908128281121336, -0.027699444453467947, 49.44400635911886],

...

]

每一项都包含了x, y, z三个值,这三个值会分别被映射到笛卡尔坐标系的 x 轴,y 轴和 z 轴上。

然后我们可以使用 GL 提供的 scatter3D 系列类型把这些数据画成三维空间中正态分布的点。

option = {

grid3D: {},

xAxis3D: {},

yAxis3D: {},

zAxis3D: { max: 100 },

series: [{

type: 'scatter3D',

data: data

}]

}

使用真实数据的三维散点图

接下来我们来看一个使用真实多维数据的三维散点图例子。

可以先从 www.echartsjs.com/examples/da… 获取这份数据。

格式化一下可以看到这份数据是很传统转成 JSON 后的表格格式。第一行是每一列数据的属性名,可以从这个属性名看出来每一列数据的含义,分别是人均收入,人均寿命,人口数量,国家和年份。

[

["Income", "Life Expectancy", "Population", "Country", "Year"],

[815, 34.05, 351014, "Australia", 1800],

[1314, 39, 645526, "Canada", 1800],

[985, 32, 321675013, "China", 1800],

[864, 32.2, 345043, "Cuba", 1800],

[1244, 36.5731262, 977662, "Finland", 1800],

...

]

在 ECharts 4 中我们可以使用 dataset 组件非常方便地引入这份数据。如果对 dataset 还不熟悉的话可以看dataset使用教程

$.get('data/asset/data/life-expectancy-table.json', function (data){

myChart.setOption({

grid3D: {},

xAxis3D: {},

yAxis3D: {},

zAxis3D: {},

dataset: {

source: data

},

series: [

{

type: 'scatter3D',

symbolSize: 2.5

}

]

})

});

默认会把前三列,也就是收入(Income),人均寿命(Life Expectancy),人口(Population)分别放到 x、 y、 z 轴上。

使用 encode 属性我们还可以将指定列的数据映射到指定的坐标轴上,从而省去很多繁琐的数据转换代码。例如我们将 x 轴换成是国家(Country),y 轴换成年份(Year),z 轴换成收入(Income),可以看到不同国家不同年份的人均收入分布。

myChart.setOption({

grid3D: {},

xAxis3D: {

// 因为 x 轴和 y 轴都是类目数据,所以需要设置 type: 'category' 保证正确显示数据。

type: 'category'

},

yAxis3D: {

type: 'category'

},

zAxis3D: {},

dataset: {

source: data

},

series: [

{

type: 'scatter3D',

symbolSize: 2.5,

encode: {

// 维度的名字默认就是表头的属性名

x: 'Country',

y: 'Year',

z: 'Income',

tooltip: [0, 1, 2, 3, 4]

}

}

]

});

利用 visualMap 组件对三维散点图进行视觉编码

myChart.setOption({

grid3D: {

viewControl: {

// 使用正交投影。

projection: 'orthographic'

}

},

xAxis3D: {

// 因为 x 轴和 y 轴都是类目数据,所以需要设置 type: 'category' 保证正确显示数据。

type: 'category'

},

yAxis3D: {

type: 'log'

},

zAxis3D: {},

visualMap: {

calculable: true,

max: 100,

// 维度的名字默认就是表头的属性名

dimension: 'Life Expectancy',

inRange: {

color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']

}

},

dataset: {

source: data

},

series: [

{

type: 'scatter3D',

symbolSize: 5,

encode: {

// 维度的名字默认就是表头的属性名

x: 'Country',

y: 'Population',

z: 'Income',

tooltip: [0, 1, 2, 3, 4]

}

}

]

})

这段代码中我们又在刚才的例子基础上加入了 visualMap 组件,将Life Expectancy这一列数据映射到了不同的颜色。

除此之外我们还把原来默认的透视投影改成了正交投影。正交投影在某些场景中可以避免因为近大远小所造成的表达错误。

当然,除了 visualMap 组件,还可以利用其它的 ECharts 内置组件并且充分利用这些组件的交互效果,比如 legend。也可以像 三维散点图和散点矩阵结合使用 这个例子一样实现二维和三维的系列混搭。

在实现 GL 的时候我们尽可能地把 WebGL 和 Canvas 之间的差异屏蔽了到最小,从而让 GL 的使用可以更加方便自然。

在笛卡尔坐标系上显示其它类型的三维图表

除了散点图,我们也可以通过 GL 在三维的笛卡尔坐标系上绘制其它类型的三维图表。比如刚才例子中将 scatter3D 类型改成 bar3D 就可以变成一个三维的柱状图。

还有机器学习中会用到的三维曲面图 surface,三维曲面图常用来表达平面上的数据走势,刚才的正态分布数据我们也可以像下面这样画成曲面图。

var data = [];

// 曲面图要求给入的数据是网格形式按顺序分布。

for (var y = -50; y <= 50; y++) {

for (var x = -50; x <= 50; x++) {

var z = gaussian(x, y);

data.push([x, y, z]);

}

}

option = {

grid3D: {},

xAxis3D: {},

yAxis3D: {},

zAxis3D: { max: 60 },

series: [{

type: 'surface',

data: data

}]

}

老板想要立体的柱状图效果

最后,我们经常会被问到如何用 ECharts 画只有二维数据的立体柱状图效果。一般来说我们是不推荐这么做的,因为这种不必要的立体柱状图很容易造成错误的表达,具体可以见我们 柱状图使用指南 中的解释。

但是如果有一些其他因素导致必须得画成立体的柱状图的话,用 GL 也可以实现。丶灬豆奶 和 阿洛儿啊 在 Gallery 已经写了类似的例子,大家可以参考。

3D堆积柱状图

3D柱状图

echart 三维可视化地图_ECharts实现三维可视化相关推荐

  1. echart 三维可视化地图_Echarts百度可视化图形库

    ECharts一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等), ...

  2. python三维图形渲染 地图_从三维数据到彩色地图

    前言:我看过these,但我不能从答案中找出如何制作情节.另外,我是python和matplotlib的新手.在 我有一个表格的数据文件X Y Z 0.05 1 z 0.10 1 z ... ... ...

  3. 三维实景地图智慧园区3D可视化物联商迪3D网平台制作

    3D可视化物联网平台是5G新时代互联网发展战略之一,随着社会与企业管理建设对社会现有的资源比如地上.地下空间数据的要求越来越迫切,而商迪3D使三维实景地图构建的的智慧园区3D可视化系统,可监控园区环境 ...

  4. excel做地图热力图_使用Excel 2016的PowerMap模块绘制可视化地图

    本文主要介绍一下如何使用Excel绘制地图.Excel绘制地图主要使用PowerMap模块.PowerMap是微软基于Bing地图开发的一款数据可视化工具,它可以对地理和时间数据进行绘制,并生动形象的 ...

  5. matlab读取八叉树,基于八叉树表示的三维栅格地图路径规划系统及方法技术方案...

    [技术实现步骤摘要] 基于八叉树表示的三维栅格地图路径规划系统及方法 本专利技术涉及地图路径规划技术,具体涉及基于八叉树表示的三维栅格地图路径规划系统及方法. 技术介绍 随着各项性能的提高,服务机器人 ...

  6. echart 三维可视化地图_实测三个工具后,我终于找到了地图可视化的神器

    做过数据分析的人都知道,老板最喜欢的莫过于数据可视化,可视化中最喜欢的莫过于地图可视化.但是想要做地图可视化也并非易事,对于大多数人来说,Excel一直都是首选,但是Excel真的是实现地图可视化的最 ...

  7. echart 三维可视化地图_揭秘720°三维全景3D实景地图制作技术

    近两年来三维全景3D实景地图在三维虚拟现实领域中占有相当大的地位.目前的三维720°线上三维实景展示基本都是通过商迪3D三维全景建模与3d全景地图技术制作.例如:VR游戏.智慧城市规划项目.智慧房地产 ...

  8. echart 三维可视化地图_可视化地图是什么?推荐3个工具!

    做数据的人都了解,每次做报告或做图表,大家最喜欢的便是数据可视化,可视化中最喜欢的便是数据地图.谁让大家都是视觉动物,而数据地图可视化最能震撼到大家.本文将分别举例用Excel.BI工具.Echart ...

  9. echart 三维可视化地图_使用 ECharts GL 实现三维可视化 - 入门款

    (题图是使用 ECharts GL 渲染的纽约市建筑群) ECharts GL (后面统一简称 GL)为 ECharts 补充了丰富的三维可视化组件,这篇文章我们会简单介绍如何基于 GL 实现一些常见 ...

  10. 《ESMap平台如何在线绘制三维可视化地图-易景空间地图》

    最近在了解一些如何绘制三维地图的问题,其中有一个ESMap平台是使用了地图编辑器场景搭建的方式,并支持在线开发,可以达到快速开发三维可视化地图的目的.所以花了几天天的时间看看这方面的东西,并总结一下. ...

最新文章

  1. jquery_3month
  2. 高质量程序程序设计指南摘录
  3. 解决protobuf import路径的问题
  4. Leetcode 剑指 Offer 58 - II. 左旋转字符串 (每日一题 20210830)
  5. Hover伪类在IE6中的实现
  6. VS2015配置opencv教程(图文详解)
  7. springboot中获取bean_最新Spring Boot干货总结(超详细,建议收藏)
  8. php开发中常用函数总结,PHP开发中常用函数总结
  9. c#和c++互操作(平台调用相关)
  10. Dirichlet Process 和 Dirichlet Process Mixture模型
  11. 蚂蚁金服“定损宝”现身AI顶级会议NeurIPS
  12. Android数据存储总结
  13. php循环5000条会不会崩,PHP -- 循环
  14. python毕业论文参考文献格式范例_毕业论文参考文献规范格式及例子
  15. PostgreSQL string_to_array函数应用
  16. 新冠病毒对计算机的影响,人工智能给新冠病毒分类
  17. python可以构建sem模型_Python Pandas Series.sem()用法及代码示例
  18. 制作自己的刷机shx文件
  19. 正大新闻:炒期货巨亏7000万引股价大跌豪悦护理回购+增持
  20. 网狐大联盟AI不进入桌子问题解决

热门文章

  1. Node.js单例模式
  2. android多媒体框架介绍(一)整体架构
  3. 硼替佐米大鼠血清白蛋白RSA纳米粒|布立尼布小麦麦清白蛋白纳米粒|马赛替尼豆清白蛋白纳米粒(齐岳)
  4. 使用pyenv和virtualenv搭建python虚拟环境实践总结
  5. oracle字段名小写改大写,Oracle数据库中如何实现将将表中字段名转换为大写
  6. 收款码三合一制作生成系统源码
  7. 图解侧方停车技巧2015高清版
  8. 【矩阵论】矩阵的广义逆
  9. 2023年辽宁大学马克思主义中国化研究考研上岸前辈备考经验指导
  10. 头脑极度开放:前额皮层大战杏仁核