可视化技术

数据:

偏耀明 7800

高军鹏 8000

代欣 8800

王国庆 20000

​ 应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据、生产数据、用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。可视化的最佳实践与误区。

实际可视化:可以通过最简单的Excel也有自己分析的图标。

也有其他类的软件做可视化:一则使用,一则是开发。使用有成品的软件可以使用,一些SPSS软件、Tableau。开发使用的是echarts、Hights、D3等一些可视化的工具和库。

通用数据分析类软件,使用于几乎所有的行业都可以拿来用,有IBM 、tableAU大的公司,专门做开发。个人版都在每年W以上。

JAVAEE、BYD这些厂商,对于C端汽车消费者、个人博主、B站UP主。我希望看到自己的信息展示。

一.需求展示

图标优势:直观、一目了然,说白了,数据可视化工作、目的就是让我们的数据以图标的形式呈现出来。

支付场景、运动健康、美食、直播、主播、学习、话费清单,太多了。形形色色的数据,打印出来二位报表只是冷冰冰的数字,不够直观,可视化,希望更为直观、直达人心。

二.Echarts-介绍

常见的数据可视化库:

  • D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)

  • ECharts.js 百度出品的一个开源 Javascript 数据可视化库

  • Highcharts.js 国外的前端数据可视化库,非商用免费,被许多国外大公司所使用

  • AntV 蚂蚁金服全新一代数据可视化解决方案 等等

    Highcharts 和 Echarts 就像是 Office 和 WPS 的关系

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

大白话:

  • 是一个JS插件
  • 性能好可流畅运行PC与移动设备
  • 兼容主流浏览器
  • 提供很多常用图表,且可定制
    • 折线图、柱状图、散点图、饼图、K线图

官网地址:https://www.echartsjs.com/zh/index.html

1-Echarts-体验

官方教程:[五分钟上手ECharts](https://www.echartsjs.com/zh/tutorial.html#5 分钟上手 ECharts)

  • 下载echarts https://github.com/apache/incubator-echarts/tree/4.5.0

使用步骤:

  1. 引入echarts 插件文件到html页面中
  2. 准备一个具备大小的DOM容器
<div id="main" style="width: 600px;height:400px;"></div>
  1. 初始化echarts实例对象
var myChart = echarts.init(document.getElementById('main'));
  1. 指定配置项和数据(option)
var option = {xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: 'line'}]
};
  1. 将配置项设置给echarts实例对象
myChart.setOption(option);

2-Echarts-基础配置

这是要求同学们知道以下配置每个模块的主要作用干什么的就可以了

需要了解的主要配置:series xAxis yAxis grid tooltip title legend color

  • series

    系列(series)是很常见的名词。在 echarts 里,系列(series)是指:

    一组数值以及他们映射成的图。“系列”这个词原本可能来源于“一系列的数据”,而在 echarts 中取其扩展的概念,不仅表示数据,也表示数据映射成为的图。所以,一个 系列 包含的要素至少有:一组数值、图表类型(series.type)、以及其他的关于这些数据如何映射成图的参数。

    echarts 里系列类型(series.type)就是图表类型。系列类型(series.type)至少有:line(折线图)、bar(柱状图)、pie(饼图)、scatter(散点图)、graph(关系图)、tree(树图)

    • 系列列表。每个系列通过 type 决定自己的图表类型
    • 大白话:图标数据,指定什么类型的图标,可以多个图表重叠。
  • xAxis:直角坐标系 grid 中的 x 轴

    • boundaryGap: 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
  • yAxis:直角坐标系 grid 中的 y 轴

  • grid:直角坐标系内绘图网格。

  • title:标题组件

  • tooltip:提示框组件

  • legend:图例组件

  • color:调色盘颜色列表

    数据堆叠,同个类目轴上系列配置相同的stack值后 后一个系列的值会在前一个系列的值上相加。

    v5.2.0 开始支持从调色盘 option.color 中取色的策略,可取值为:

    • 'series':按照系列分配调色盘中的颜色,同一系列中的所有数据都是用相同的颜色;
    • 'data':按照数据项分配调色盘中的颜色,每个数据项都使用不同的颜色。
option = {// color设置我们线条的颜色 注意后面是个数组,第一个颜色设置color: ['pink', 'red', 'green', 'skyblue'],// 设置图表的标题title: {text: '折线图堆叠'},// 图表的提示框组件 tooltip: {// 触发方式trigger: 'axis'},// 图例组件legend: {// series里面有了 name值则 legend里面的data可以删掉},// 网格配置  grid可以控制线形图 柱状图 图表大小grid: {left: '3%',right: '4%',bottom: '3%',// 是否显示刻度标签 如果是true 就显示 否则反之containLabel: true},// 工具箱组件  可以另存为图片等功能toolbox: {feature: {saveAsImage: {}}},// 设置x轴的相关配置xAxis: {type: 'category',// 是否让我们的线条和坐标轴是否有留白(两端)。true:有;false:无;boundaryGap: false,data: ['星期一', '周二', '周三', '周四', '周五', '周六', '周日'],colorBy:'data'},    // 设置y轴的相关配置yAxis: {type: 'value'},// 系列图表配置 它决定着显示那种类型的图表series: [{name: '邮件营销',type: 'line',           data: [120, 132, 101, 134, 90, 230, 210]},{name: '联盟广告',type: 'line',data: [220, 182, 191, 234, 290, 330, 310]},{name: '视频广告',type: 'line',          data: [150, 232, 201, 154, 190, 330, 410]},{name: '直接访问',type: 'line',          data: [320, 332, 301, 334, 390, 330, 320]}]
};

效果

3- 柱状图图表(两大步骤)

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表
  1. 引入到html页面中
// 柱状图1模块
(function() {// 实例化对象let myChart = echarts.init(document.querySelector(".bar .chart"));// 指定配置和数据let option = {color: ["#3398DB"],tooltip: {trigger: "axis",axisPointer: {// 坐标轴指示器,坐标轴触发有效type: "shadow" // 默认为直线,可选为:'line' | 'shadow'}},grid: {left: "3%",right: "4%",bottom: "3%",containLabel: true},xAxis: [{type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],axisTick: {alignWithLabel: true}}],yAxis: [{type: "value"}],series: [{name: "直接访问",type: "bar",barWidth: "60%",data: [10, 52, 200, 334, 390, 330, 220]}]};// 把配置给实例对象myChart.setOption(option);
})();
  1. 根据需求定制

    • 修改图表柱形颜色 #2f89cf

    • 修改图表大小 top 为 10px bottom 为 4% grid决定我们的柱状图的大小

    color: ["#2f89cf"],
    grid: {left: "0%",top: "10px",right: "0%",bottom: "4%",containLabel: true
    },
    
    • X轴相关设置 xAxis

      • 文本颜色设置为 rgba(255,255,255,.6) 字体大小为 12px
      • X轴线的样式 不显示
    // 设置x轴标签文字样式
    

// x轴的文字颜色和大小
axisLabel: {
color: “rgba(255,255,255,.6)”,
fontSize: “12”
},
// x轴样式不显示
axisLine: {
show: false
}
}


- Y 轴相关定制- 文本颜色设置为   rgba(255,255,255,.6)   字体大小为 12px- Y 轴线条样式 更改为  1像素的  rgba(255,255,255,.1) 边框- 分隔线的颜色修饰为  1像素的  rgba(255,255,255,.1)   ~~~JavaScript
// y 轴文字标签样式
axisLabel: {color: "rgba(255,255,255,.6)",fontSize: "12"
},// y轴线条样式axisLine: {lineStyle: {color: "rgba(255,255,255,.1)",// width: 1,// type: "solid"}
5232},// y 轴分隔线样式
splitLine: {lineStyle: {color: "rgba(255,255,255,.5)"}
}

  • 修改柱形为圆角以及柱子宽度 series 里面设置
series: [{name: "直接访问",type: "bar",// 修改柱子宽度barWidth: "35%",data: [10, 52, 200, 334, 390, 330, 220],itemStyle: {// 修改柱子圆角barBorderRadius: 5}}]};
  • 更换对应数据
// x轴中更换data数据data: [ "旅游行业","教育培训", "游戏行业", "医疗行业", "电商行业", "社交行业", "金融行业" ],
// series 更换数据data: [200, 300, 300, 900, 1500, 1200, 600]
  • 让图表跟随屏幕自适应

    外部div要是响应式,或div加百分比

  window.addEventListener("resize", function() {myChart.resize();});

4-柱状图2定制

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表

需求1: 修改图形大小 grid

  // 图标位置grid: {top: "10%",left: "22%",bottom: "10%"},

需求2: 不显示x轴

   xAxis: {show: false},

需求3: y轴相关定制

  • 不显示y轴线和相关刻度
//不显示y轴线条
axisLine: {show: false},
// 不显示刻度
axisTick: {show: false
},
  • y轴文字的颜色设置为白色
   axisLabel: {color: "#fff"},

需求4: 修改第一组柱子相关样式(条状)

name: "条",
// 柱子之间的距离
barCategoryGap: 50,
//柱子的宽度
barWidth: 10,
// 柱子设为圆角
itemStyle: {normal: {barBorderRadius: 20,       }
},
  • 设置第一组柱子内百分比显示数据
// 图形上的文本标签
label: {normal: {show: true,// 图形内显示position: "inside",// 文字的显示格式formatter: "{c}%"}
},
  • 设置第一组柱子不同颜色
// 声明颜色数组
var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"];
// 2. 给 itemStyle  里面的color 属性设置一个 返回值函数itemStyle: {normal: {barBorderRadius: 20,  // params 传进来的是柱子对象console.log(params);// dataIndex 是当前柱子的索引号return myColor[params.dataIndex];}},

需求5: 修改第二组柱子的相关配置(框状)

         name: "框",type: "bar",barCategoryGap: 50,barWidth: 15,itemStyle: {color: "none",borderColor: "#00c1de",borderWidth: 3,barBorderRadius: 15},data: [19325, 23438, 31000, 121594, 134141, 681807]}

需求6: 给y轴添加第二组数据

yAxis: [{type: "category",data: ["印尼", "美国", "印度", "中国", "世界人口(万)"],// 不显示y轴的线axisLine: {show: false},// 不显示刻度axisTick: {show: false},// 把刻度标签里面的文字颜色设置为白色axisLabel: {color: "#fff"}},{show: true,data: [702, 350, 610, 793, 664],// 不显示y轴的线axisLine: {show: false},// 不显示刻度axisTick: {show: false},axisLabel: {textStyle: {fontSize: 12,color: "#fff"}}}],

需求7: 设置两组柱子层叠以及更换数据

// 给series  第一个对象里面的 添加
yAxisIndex: 0,
// 给series  第二个对象里面的 添加
yAxisIndex: 1,
// series 第一个对象里面的data
data: [70, 34, 60, 78, 69],
// series 第二个对象里面的data
data: [100, 100, 100, 100, 100],
// y轴更换第一个对象更换data数据
data: ["HTML5", "CSS3", "javascript", "VUE", "NODE"],
// y轴更换第二个对象更换data数据
data:[702, 350, 610, 793, 664],

完整代码:

// 柱状图2
(function() {var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"];// 1. 实例化对象var myChart = echarts.init(document.querySelector(".bar2 .chart"));// 2. 指定配置和数据var option = {grid: {top: "10%",left: "22%",bottom: "10%"// containLabel: true},// 不显示x轴的相关信息xAxis: {show: false},yAxis: [{type: "category",inverse: true,data: ["HTML5", "CSS3", "javascript", "VUE", "NODE"],// 不显示y轴的线axisLine: {show: false},// 不显示刻度axisTick: {show: false},// 把刻度标签里面的文字颜色设置为白色axisLabel: {color: "#fff"}},{data: [702, 350, 610, 793, 664],inverse: true,// 不显示y轴的线axisLine: {show: false},// 不显示刻度axisTick: {show: false},// 把刻度标签里面的文字颜色设置为白色axisLabel: {color: "#fff"}}],series: [{name: "条",type: "bar",data: [70, 34, 60, 78, 69],yAxisIndex: 0,// 修改第一组柱子的圆角itemStyle: {barBorderRadius: 20,// 此时的color 可以修改柱子的颜色color: function(params) {// params 传进来的是柱子对象console.log(params);// dataIndex 是当前柱子的索引号return myColor[params.dataIndex];}},// 柱子之间的距离barCategoryGap: 50,//柱子的宽度barWidth: 10,// 显示柱子内的文字label: {show: true,position: "inside",// {c} 会自动的解析为 数据  data里面的数据formatter: "{c}%"}},{name: "框",type: "bar",barCategoryGap: 50,barWidth: 15,yAxisIndex: 1,data: [100, 100, 100, 100, 100],itemStyle: {color: "none",borderColor: "#00c1de",borderWidth: 3,barBorderRadius: 15}}]};// 3. 把配置给实例对象myChart.setOption(option);
})();

5-折线图1 人员变化模块制作

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表

需求1: 修改折线图大小,显示边框设置颜色:#012f4a,并且显示刻度标签。

    // 设置网格样式grid: { top: '20%',left: '3%',right: '4%',bottom: '3%',show: true,// 显示边框borderColor: '#012f4a',// 边框颜色containLabel: true // 包含刻度文字在内},

需求2: 修改图例组件中的文字颜色 #4c9bfd, 距离右侧 right 为 10%

 // 图例组件legend: {textStyle: {color: '#4c9bfd' // 图例文字颜色},right: '10%' // 距离右边10%},

需求3: x轴相关配置

  • 刻度去除
  • x轴刻度标签字体颜色:#4c9bfd
  • 剔除x坐标轴线颜色(将来使用Y轴分割线)
  • 轴两端是不需要内间距 boundaryGap
    xAxis: {type: 'category',data: ["周一", "周二"],axisTick: {show: false // 去除刻度线},axisLabel: {color: '#4c9bfd' // 文本颜色},axisLine: {show: false // 去除轴线},boundaryGap: false  // 去除轴内间距},

需求4: y轴的定制

  • 刻度去除
  • 字体颜色:#4c9bfd
  • 分割线颜色:#012f4a
    yAxis: {type: 'value',axisTick: {show: false  // 去除刻度},axisLabel: {color: '#4c9bfd' // 文字颜色},splitLine: {lineStyle: {color: '#012f4a' // 分割线颜色}}},

需求5: 两条线形图定制

  • 颜色分别:#00f2f1 #ed3f35
  • 把折线修饰为圆滑 series 数据中添加 smooth 为 true
    color: ['#00f2f1', '#ed3f35'],series: [{name:'新增粉丝',data: [820, 932, 901, 934, 1290, 1330, 1320],type: 'line',// 折线修饰为圆滑smooth: true,},{name:'新增游客',data: [100, 331, 200, 123, 233, 543, 400],type: 'line',smooth: true,}]

需求6: 配置数据

// x轴的文字
xAxis: {type: 'category',data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
// 图标数据series: [{name:'新增粉丝',data:  [24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],type: 'line',smooth: true},{name:'新增游客',data: [40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79],     type: 'line',smooth: true}}]

需求7: 新增需求 点击 2020年 2021年 数据发生变化

以下是后台送过来数据(ajax请求过来的)

 var yearData = [{year: '2020',  // 年份data: [  // 两个数组是因为有两条线[24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],[40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]]},{year: '2021',  // 年份data: [  // 两个数组是因为有两条线[123, 175, 112, 197, 121, 67, 98, 21, 43, 64, 76, 38],[143, 131, 165, 123, 178, 21, 82, 64, 43, 60, 19, 34]]}];
  • tab栏切换事件
  • 点击2020按钮 需要把 series 第一个对象里面的data 换成 2020年对象里面data[0]
  • 点击2020按钮 需要把 series 第二个对象里面的data 换成 2020年对象里面data[1]
  • 2021 按钮同样道理

完整代码:

// 折线图1模块制作
(function() {var yearData = [{year: "2020", // 年份data: [// 两个数组是因为有两条线[24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],[40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]]},{year: "2021", // 年份data: [// 两个数组是因为有两条线[123, 175, 112, 197, 121, 67, 98, 21, 43, 64, 76, 38],[143, 131, 165, 123, 178, 21, 82, 64, 43, 60, 19, 34]]}];// 1. 实例化对象var myChart = echarts.init(document.querySelector(".line .chart"));// 2.指定配置var option = {// 通过这个color修改两条线的颜色color: ["#00f2f1", "#ed3f35"],tooltip: {trigger: "axis"},legend: {// 如果series 对象有name 值,则 legend可以不用写data// 修改图例组件 文字颜色textStyle: {color: "#4c9bfd"},// 这个10% 必须加引号right: "10%"},grid: {top: "20%",left: "3%",right: "4%",bottom: "3%",show: true, // 显示边框borderColor: "#012f4a", // 边框颜色containLabel: true // 包含刻度文字在内},xAxis: {type: "category",boundaryGap: false,data: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],axisTick: {show: false // 去除刻度线},axisLabel: {color: "#4c9bfd" // 文本颜色},axisLine: {show: false // 去除轴线}},yAxis: {type: "value",axisTick: {show: false // 去除刻度线},axisLabel: {color: "#4c9bfd" // 文本颜色},axisLine: {show: false // 去除轴线},splitLine: {lineStyle: {color: "#012f4a" // 分割线颜色}}},series: [{name: "新增粉丝",type: "line",// true 可以让我们的折线显示带有弧度smooth: true,data: yearData[0].data[0]},{name: "新增游客",type: "line",smooth: true,data: yearData[0].data[1]}]};// 3. 把配置给实例对象myChart.setOption(option);// 4. 让图表跟随屏幕自动的去适应window.addEventListener("resize", function() {myChart.resize();});// 5.点击切换效果$(".line h2").on("click", "a", function() {// alert(1);// console.log($(this).index());// 点击 a 之后 根据当前a的索引号 找到对应的 yearData的相关对象// console.log(yearData[$(this).index()]);var obj = yearData[$(this).index()];option.series[0].data = obj.data[0];option.series[1].data = obj.data[1];// 需要重新渲染myChart.setOption(option);});
})();

6-折线图2 播放量模块制作

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表

需求1: 更换图例组件文字颜色 rgba(255,255,255,.5) 文字大小为12

 legend: {top: "0%",textStyle: {color: "rgba(255,255,255,.5)",fontSize: "12"}
},

需求2: 修改图表大小

grid: {left: "10",top: "30",right: "10",bottom: "10",containLabel: true},

需求3: 修改x轴相关配置

  • 修改文本颜色为rgba(255,255,255,.6) 文字大小为 12
  • x轴线的颜色为 rgba(255,255,255,.2)
     // 文本颜色为rgba(255,255,255,.6)  文字大小为 12axisLabel: {textStyle: {color: "rgba(255,255,255,.6)",fontSize: 12}},// x轴线的颜色为   rgba(255,255,255,.2)axisLine: {lineStyle: {color: "rgba(255,255,255,.2)"}},

需求4: 修改y轴的相关配置

        axisTick: { show: false },axisLine: {lineStyle: {color: "rgba(255,255,255,.1)"}},axisLabel: {textStyle: {color: "rgba(255,255,255,.6)",fontSize: 12}},// 修改分割线的颜色splitLine: {lineStyle: {color: "rgba(255,255,255,.1)"}}

需求5: 修改两个线模块配置(注意在series 里面定制)

       //第一条 线是圆滑smooth: true,// 单独修改线的样式lineStyle: {color: "#0184d5",width: 2 },// 填充区域areaStyle: {// 渐变色,只需要复制即可color: new echarts.graphic.LinearGradient(0,0,0,1,[{offset: 0,color: "rgba(1, 132, 213, 0.4)"   // 渐变色的起始颜色},{offset: 0.8,color: "rgba(1, 132, 213, 0.1)"   // 渐变线的结束颜色}],false),shadowColor: "rgba(0, 0, 0, 0.1)"},// 设置拐点 小圆点symbol: "circle",// 拐点大小symbolSize: 8,// 设置拐点颜色以及边框itemStyle: {color: "#0184d5",borderColor: "rgba(221, 220, 107, .1)",borderWidth: 12},// 开始不显示拐点, 鼠标经过显示showSymbol: false,
       name: "转发量",type: "line",smooth: true,lineStyle: {normal: {color: "#00d887",width: 2}},areaStyle: {normal: {color: new echarts.graphic.LinearGradient(0,0,0,1,[{offset: 0,color: "rgba(0, 216, 135, 0.4)"},{offset: 0.8,color: "rgba(0, 216, 135, 0.1)"}],false),shadowColor: "rgba(0, 0, 0, 0.1)"}},// 设置拐点 小圆点symbol: "circle",// 拐点大小symbolSize: 5,// 设置拐点颜色以及边框itemStyle: {color: "#00d887",borderColor: "rgba(221, 220, 107, .1)",borderWidth: 12},// 开始不显示拐点, 鼠标经过显示showSymbol: false,

需求6: 更换数据

// x轴更换数据
data: [ "01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","26","28","29","30"],
// series  第一个对象data数据data: [ 30, 40, 30, 40,30, 40, 30,60,20, 40, 30, 40, 30, 40,30, 40, 30,60,20, 40, 30, 40, 30, 40,30, 40, 20,60,50, 40],
// series  第二个对象data数据data: [ 130, 10, 20, 40,30, 40, 80,60,20, 40, 90, 40,20, 140,30, 40, 130,20,20, 40, 80, 70, 30, 40,30, 120, 20,99,50, 20],

7-饼形图 1年龄分布模块制作

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表

定制图表需求1:

  • 修改图例组件在底部并且居中显示。
  • 每个小图标的宽度和高度修改为 10px
  • 文字大小为12 颜色 rgba(255,255,255,.5)
 legend: {// 距离底部为0%bottom: "0%",// 小图标的宽度和高度itemWidth: 10,itemHeight: 10,data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'],// 修改图例组件的文字为 12pxtextStyle: {color: "rgba(255,255,255,.5)",fontSize: "12"}},
<html>
<head lang="en"><meta charset="utf-8"><title>ECharts</title><style type="text/css">#main{height:400px;width: 1000px}</style><script src="echarts.min.js"></script>
</head>
<body>
<div id="main">
</div>
<script type="text/javascript">// 基于准备好的dom,初始化 echarts 实例并绘制图表。var myChart = echarts.init(document.getElementById("main"));// 指定图表的配置项和数据var option = {tooltip: {trigger: 'item',// trigger 设置触发类型,默认数据触发,可选值:'item' ¦ 'axis'formatter: "{a} <br/>{b}: {c} ({d}%)"// formatter设置提示框显示内容,// {a}指series.name,b}指series.data的name,// {c}指series.data的value  {d}%指这一部分占总数的百分比.},legend: {orient: 'vertical',x: 'left',data:['网页访问','邮件推送','网页广告','视频广告','搜索引擎']},series: [{name:'访问来源',type:'pie',
//                roseType:'area',//是否显示成南丁格尔图默认falseradius: ['30%', '70%'],// 设置环形饼状图, 第一个百分数设置内圈大小,第二个百分数设置外圈大小center: ['50%', '50%'], // 设置饼状图位置,第一个百分数调水平位置,第二个百分数调垂直位置data:[{value:335, name:'网页访问'},{value:310, name:'邮件推送'},{value:234, name:'网页广告'},{value:135, name:'视频广告'},{value:1548, name:'搜索引擎'}]}]};myChart.setOption(option);// 使用刚指定的配置项和数据显示图表myChart.setOption(option);
</script>
</body>
</html>

定制需求2:

  • 修改水平居中 垂直居中
  • 修改内圆半径和外圆半径为 [“40%”, “60%”] pink老师友情提示,带有直角坐标系的比如折线图柱状图是 grid修改图形大小,而我们饼形图是通过 radius 修改大小
series: [{name: "年龄分布",type: "pie",// 设置饼形图在容器中的位置center: ["50%", "50%"],//  修改内圆半径和外圆半径为  百分比是相对于容器宽度来说的radius: ["40%", "60%"],// 不显示标签文字label: { show: false },// 不显示连接线labelLine: { show: false },}]

定制需求3:更换数据

// legend 中的data  可省略
data: ["0岁以下", "20-29岁", "30-39岁", "40-49岁", "50岁以上"],
//  series 中的数据data: [{ value: 1, name: "0岁以下" },{ value: 4, name: "20-29岁" },{ value: 2, name: "30-39岁" },{ value: 2, name: "40-49岁" },{ value: 1, name: "50岁以上" }] ,

定制需求4: 更换颜色

color: ["#065aab","#066eab","#0682ab","#0696ab","#06a0ab",],
 // 4. 让图表跟随屏幕自动的去适应window.addEventListener("resize", function() {myChart.resize();});

8-饼形图2 地区分布模块制作(南丁格尔玫瑰图)

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表

第二步:按照需求定制

  • 需求1:颜色设置
color: ['#006cff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff'],
  • 需求2:修改饼形图大小 ( series对象)
radius: ['10%', '70%'],
  • 需求3: 把饼形图的显示模式改为 半径模式
 roseType: "radius",
  • 需求4:数据使用更换(series对象 里面 data对象)
          { value: 20, name: '云南' },{ value: 26, name: '北京' },{ value: 24, name: '山东' },{ value: 25, name: '河北' },{ value: 20, name: '江苏' },{ value: 25, name: '浙江' },{ value: 30, name: '四川' },{ value: 42, name: '湖北' }
  • 需求5:字体略小些 10 px ( series对象里面设置 )

    饼图图形上的文本标签可以控制饼形图的文字的一些样式。 label 对象设置

series: [{name: "面积模式",type: "pie",radius: [30, 110],center: ["50%", "50%"],roseType: "radius",// 文本标签控制饼形图文字的相关样式, 注意它是一个对象label: {fontSize: 10},}]};
  • 需求6:防止缩放的时候,引导线过长。引导线略短些 (series对象里面的 labelLine 对象设置 )

    • 连接图表 6 px
    • 连接文字 8 px
+        // 文字调整
+        label:{
+          fontSize: 10
+        },
+        // 引导线调整
+        labelLine: {
+          // 连接扇形图线长
+          length: 6,
+          // 连接文字线长
+          length2: 8
+        }
+      }
+    ],
  • 需求6:浏览器缩放的时候,图表跟着自动适配。
// 监听浏览器缩放,图表对象调用缩放resize函数
window.addEventListener("resize", function() {myChart.resize();});

9-Echarts-社区介绍

社区就是一些,活跃的echart使用者,交流和贡献定制好的图表的地方。

  • 在这里可以找到一些基于echart的高度定制好的图表,相当于基于jquery开发的插件,这里是基于echarts开发的第三方的图表。

10-Echarts-map使用(扩展)

参考社区的例子:https://gallery.echartsjs.com/editor.html?c=x0-ExSkZDM (模拟飞机航线)

实现步骤:

  • 第一需要下载china.js提供中国地图的js文件
  • 第二个因为里面代码比较多,我们新建一个新的js文件 myMap.js 引入
  • 使用社区提供的配置即可。

需要修改:

  • 去掉标题组件
  • 去掉背景颜色
  • 修改地图省份背景 #142957 areaColor 里面做修改
  • 地图放大通过 zoom 设置为1.2即可
    geo: {map: 'china',zoom: 1.2,label: {emphasis: {show: false}},roam: false,itemStyle: {normal: {areaColor: '#142957',borderColor: '#0692a4'},emphasis: {areaColor: '#0b1c2d'}}},

总结:这例子是扩展案例,大家以后可以多看看社区里面的案例。

20- 最后约束缩放

/* 约束屏幕尺寸 */
@media screen and (max-width: 1024px) {html {font-size: 42px !important;}
}
@media screen and (min-width: 1920px) {html {font-size: 80px !important;}
}

21.雷达图

<template><div><div id="myChart" :style="{ width: '600px', height: '400px' }"></div></div>
</template><script>
export default {name: 'Radar',data() {return {}},mounted() {this.drawLine()},methods: {drawLine() {// 基于准备好的dom,初始化echarts实例let myChart = this.$echarts.init(document.getElementById('myChart'))let dataMax = [{ name: '易用性', max: '100' },{ name: '功能', max: '100' },{ name: '拍照', max: '100' },{ name: '跑分', max: '102' },{ name: '续航', max: '100' },]let option = {//配置维度的最大值radar: {name: {show: true,color: 'red',},//   雷达图的指示器,用来指定雷达图中的多个变量(维度)indicator: dataMax,shape: 'circle', //对雷达图形设置成一个圆形,可选 circle:圆形,polygon:多角形(默认)},series: [{type: 'radar',label: {show: true, //显示数值},areaStyle: {}, //每个雷达图形成一个阴影的面积data: [{name: '华为手机',value: [80, 90, 80, 82, 90],},{name: '苹果手机',value: [70, 80, 88, 62, 98],},],},],}// 绘制图表myChart.setOption(option)},},
}
</script><style>
</style>

22.仪表图

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Echarts</title><script src="echarts.min.js"></script>
</head><body><div id="main" style="width: 600px; height: 400px;"></div><script type="text/javascript">var myChart = echarts.init(document.getElementById("main"));var data1 = [{name: "完成率(%)",value: 50,}];var option = {tooltip: {},title: {text: '项目实际完成率(%)',x: 'center',y: 25,},series: [{name: '单仪表盘',type: 'gauge',progress: {show: true},radius: "80%",center: ['50%', '55%'],sartAngle: 225,endAngle: -45,clockwise: true,min: 0,max: 100,splitNumber: 10,data: data1,}]};setInterval(function () {option.series[0].data[0].value = (Math.random() * 100).toFixed(2);myChart.setOption(option, true);}, 2000);</script>
</body>
</html>

23.K线图

<html>
<head lang="en"><meta charset="utf-8"><title>ECharts</title><style type="text/css">#main{height:400px;width: 850px}</style><script src="echarts.min.js"></script>
</head>
<body>
<div id="main"></div>
<script type="text/javascript">// 基于准备好的dom,初始化 echarts 实例并绘制图表。var myChart = echarts.init(document.getElementById("main"));// 指定图表的配置项和数据var option = {xAxis: {data: ['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27']},yAxis: {},series: [{type: 'candlestick',data: [  //开盘价  收盘价  最低价格  最高价格;如果收盘价>开盘价,则为红色//如果开盘价>收盘价,则为绿色.[20, 34, 10, 38],[40, 35, 30, 50],[31, 38, 33, 44],[38, 15, 5, 42]]}]
};myChart.setOption(option);   myChart.setOption(option);
</script>
</body>
</html>

24.旭日图

旭日图中每个级别的数据通过1个圆环表示,离原点越近代表圆环级别越高,最内层的圆表示层次结构的顶级,然后一层一层去看数据的占比情况。越往外,级别越低,且分类越细。

在数据可视化图表中,要展示不同分类下的各项数据占比时,我们经常用到的是饼图,但遇到多层次的数据时,饼图就显得力不从心。不过还有个更强大的“饼图”可以帮助你,ta就是“旭日图”。

相比之下,旭日图更适合用于展示多层级的数据,ta能够非常清晰的展示出不同层次数据间的关系,更细分溯源,真正了解数据的具体构成。

旭日图不仅数据直观,而且图表用起来特别炫酷,分分钟拉高数据汇报的颜值!很多可视化场景都适合用旭日图,比如在销售情况汇报中,方便看到每个分公司的销售业绩分布(如下图:销售额分布):

<html>
<head lang="en"><meta charset="utf-8"><title>ECharts</title><style type="text/css">#main{height:400px;width: 1000px}</style><script src="echarts.min.js"></script>
</head>
<body>
<div id="main"></div>
<script type="text/javascript">// 基于准备好的dom,初始化 echarts 实例并绘制图表。var myChart = echarts.init(document.getElementById("main"));// 指定图表的配置项和数据var data = [{name: '祖父',children: [{name: '李叔叔',value: 15,children: [{name: '兄弟 Jack',value: 2},{name: '兄弟 Mary',value: 5,children: [{name: '儿子 Jack',value: 2}]},{name: '兄弟 Ben',value: 4}]},{name: '爸爸',value: 10,children: [{name: 'Me',value: 5},{name: '兄弟 Peter',value: 1}]}]},{name: '祖母',children: [{name: '李伯伯',children: [{name: '兄弟 Betty',value: 1},{name: '兄弟 Jenny',value: 2}]}]}
];
option = {series: {type: 'sunburst',// emphasis: {//     focus: 'ancestor'// },data: data,radius: [0, '90%'],label: {rotate: 'radial'}}
};myChart.setOption(option);// 使用刚指定的配置项和数据显示图表myChart.setOption(option);
</script>
</body>
</html>

25.大中华地图

<html>
<head lang="en"><meta charset="utf-8"><title>ECharts</title></style><script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script><script src="http://cdn.zaixianke.com/china.js"></script>    <script src="echarts.min.js"></script>
</head>
<body><div id="china" style="height: 450px;width:750px;"></div><script src="/static/js/echarts.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js"></script><script>// 初始化echarts实例var myEcharts = echarts.init(document.getElementById("china"));var option = {title: {  //标题样式text: '中国地图',x: "center",textStyle: {fontSize: 18,color: "black"},},tooltip: {trigger: 'item',formatter: function (params) {console.log(params)if (params.name) {return params.name + ' : ' + (isNaN(params.value) ? 0 : parseInt(params.value));}}},visualMap: {//视觉映射组件top: 'bottom',left: 'left',min: 10,max: 500000,//text: ['High', 'Low'],realtime: false,  //拖拽时,是否实时更新calculable: true,  //是否显示拖拽用的手柄inRange: {color: ['lightskyblue', 'yellow', 'orangered']}},series: [{name: '模拟数据',type: 'map',mapType: 'china',roam: false,//是否开启鼠标缩放和平移漫游itemStyle: {//地图区域的多边形 图形样式normal: {//是图形在默认状态下的样式label: {show: true,//是否显示标签textStyle: {color: "black"}}},zoom: 1.5,  //地图缩放比例,默认为1emphasis: {//是图形在高亮状态下的样式,比如在鼠标悬浮或者图例联动高亮时label: {show: true}}},top: "3%",//组件距离容器的距离data: [{name: '北京', value: 350000},{name: '天津', value: 120000},{name: '上海', value: 300000},{name: '重庆', value: 92000},{name: '河北', value: 25000},{name: '河南', value: 20000},{name: '云南', value: 500},{name: '辽宁', value: 3050},{name: '黑龙江', value: 80000},{name: '湖南', value: 2000},{name: '安徽', value: 24580},{name: '山东', value: 40629},{name: '新疆', value: 36981},{name: '江苏', value: 13569},{name: '浙江', value: 24956},{name: '江西', value: 15194},{name: '湖北', value: 41398},{name: '广西', value: 41150},{name: '甘肃', value: 17630},{name: '山西', value: 27370},{name: '内蒙古', value: 27370},{name: '陕西', value: 97208},{name: '吉林', value: 88290},{name: '福建', value: 19978},{name: '贵州', value: 94485},{name: '广东', value: 89426},{name: '青海', value: 35484},{name: '西藏', value: 97413},{name: '四川', value: 54161},{name: '宁夏', value: 56515},{name: '海南', value: 54871},{name: '台湾', value: 48544},{name: '香港', value: 49474},{name: '澳门', value: 34594}]}]};// 使用刚指定的配置项和数据显示图表。myEcharts.setOption(option);</script>
</body>
</html>

大数据工程师必备之数据可视化技术相关推荐

  1. 独家 | 一份数据工程师必备的学习资源,干货满满(附链接)

    作者:PRANAV DAR 翻译:张玲 校对:车前子 本文约6500字,建议阅读15分钟. 本文首先详细介绍了数据工程的职责.与数据科学家之间的差别以及其不同的工作角色,然后重点列出了很多与核心技能相 ...

  2. 算法/数据工程师必备技能

    算法/数据工程师必备技能 基础知识 线性代数 矩阵理论 概率论 随机过程 图论 数值分析 最优化理论 机器学习 统计学习方法 数据挖掘 平台 Linux  语言 Python Linux shell ...

  3. 数据科学家 数据工程师_发展数据科学家和工程师

    数据科学家 数据工程师 by David Venturi 大卫·文图里(David Venturi) 发展数据科学家和工程师 (Developing Data Scientists and Engin ...

  4. 数据科学必备Pandas数据预处理方法汇总

    Pandas DataFrame 是一个包含二维数据及其对应索引的结构.DataFrame 广泛用于数据科学.机器学习.科学计算和许多其他数据密集型领域. DataFrame 类似于SQL 表或在 E ...

  5. 大数据工程师必备技能

    版权声明: https://blog.csdn.net/laomo_bible/article/details/79582023 引用几张图片: 包括基本技能和高阶能力: 基本技能: 1.java.p ...

  6. AI时代,数据工程师必备知识总结

    包括Java/J2EE/Hadoop/机器学习/Spark/SpringCloud部分,共20题,每一题是5分. Mina的线程工作原理,如何在业务中使用?如何进行性能调优? 答:参见https:// ...

  7. 大数据可视化模板_最佳大数据可视化技术

    研究人员一致认为,视觉是我们的主要意识:我们感知,学习或处理的信息中有80-85%是通过视觉进行调节的. 当我们试图理解和解释数据时,或者当我们寻找数百或数千个变量之间的关系以确定它们的相对重要性时, ...

  8. 大数据工程师需要哪些基础知识?

    大数据是眼下非常时髦的技术名词,与此同时自然也催生出了一些与大数据处理相关的职业,通过对数据的挖掘分析来影响企业的商业决策. 这群人在国外被叫做数据科学家(Data Scientist),这个头衔最早 ...

  9. 大数据工程师职业发展以及薪酬一览

    大数据是眼下非常时髦的技术名词,与此同时自然也催生出了一些与大数据处理相关的职业,通过对数据的挖掘分析来影响企业的商业决策. 这群人在国外被叫做数据科学家(Data Scientist),这个头衔最早 ...

  10. 深度解析数据分析、大数据工程师和数据科学家的区别

    数据越来越多的影响并塑造着那些我们每天都要交互的系统.不管是你使用Siri,google搜索,还是浏览facebook的好友动态,你都在消费者数据分析的结果.我们赋予了数据如此大的转变的能力,也难怪近 ...

最新文章

  1. H264 数据avi文件封装和拆解
  2. 约瑟夫问题pascal程序
  3. 使用docker部署vue_如何使用Vue,Docker和Azure进行持续交付
  4. 开两个服务内存溢出_应用服务OkHttpClient创建大量对外连接时内存溢出
  5. 正则表达式验证账号代码
  6. elementui中给input框赋值成功后input框不能进行编辑问题
  7. “Windows Sandbox”——PC主系统从未如此安全
  8. Focal Loss for Dense Object Detection解读
  9. CS231n李飞飞计算机视觉 神经网络训练细节part1上
  10. 《哥德尔、艾舍尔、巴赫:集异璧之大成》
  11. 【工作技巧】防止电脑睡眠,让鼠标自动周期性的点击屏幕
  12. 华为手机的10个使用技巧,你知道吗
  13. Photoshop CS 5 注册方法
  14. HTML5、CSS、JS基础
  15. AndroidN多窗口支持
  16. 应用计算机测定线性电阻伏安特性实验报告,电阻伏安特性曲线实验报告.docx
  17. 包机制、访问修饰符、Jar包 java初学 面向对象五
  18. 除尘机器人毕业_一种除尘机器人的制作方法
  19. 【控制理论】状态空间模型、传递函数、差分方程的相互转换
  20. Linux 系统优化相关经验总结

热门文章

  1. 开发中,GA、Beta、GA、Trial到底是什么含义
  2. python基础五之for和while
  3. Boom 3D 1.2.2 特别版 Mac 3D环绕音效增强工具
  4. 全栈之初识JWT -- Web安全的守护神
  5. 电影《五十度灰》主题曲《Love me like you do》——尽你所能爱我Ellie Goulding(埃利·高登)——【英文小清新歌曲推荐】
  6. java:文本框的简单使用
  7. Java 基于JavaMail实现向QQ邮箱发送邮件(未测试)
  8. golang 实现延迟执行
  9. 番茄todo服务器维护,番茄ToDo:克服“拖延症”必备高效神器!
  10. 正确区分标识(zhi)符、关键字与保留字