Echarts可视化图表库 (概念与配置项)

Echarts,基于JavaScript的数据可视化图表库

建立chart容器,并初始化

//需要在HTML中提前建立一个div节点
//并且需要为div声明width和height属性(通过CSS声明)
<div id="chart" style="width:200px; height:200px;"></div>
// 通过节点id获取到容器元素,并通过init方法初始化图表
// 使用init初始化时,要保证容器已经设置了width和height属性
var el= document.getElementById("chart");
var myChart = echarts.init(el);

// 如果初始化时没有设置width和height,可以在init中制定容器大小
 var myChart = echarts.init(el, null, {
    width: 600,
    height: 400
  });

图表相应容器大小变化

// // 监听页面的 window.onresize 事件获取浏览器大小改变的事件,然后调用 echartsInstance.resize 改变图表的大小
window.onresize = function() {
    myChart.resize();
  };
  
//指定宽度和高度,实现图表大小不等于容器大小的效果
myChart.resize({
  width: 800,
  height: 400
});

容器节点的销毁以及重建

– 待添加

配置项

title参数

标题组件,包含主标题和副标题

option = {
	title: {
		id: 1// 组件id,默认不指定,制定后可用与在option或者API中引用组件
		show:true// 是否显示标题组件
		text:''// 主标题文本,可以使用\n换行
		link:''// 主标题超链接
		target:'blank'// 指定窗口打开主标题超链接,self当前窗口打开,blank新窗口打开
		textStyle: {
			color: '#333', // 主题文字的颜色
			fontStyle: 'normal', // 主标题文字字体风格(normal,italic,oblique)
			fontWeight: 'bolder', // 主标题文字粗细 (normal,bold,bolder,lighter)
			fontFamily: 'sans-serif', // 主标题字体,可更换
			fontSize: 18,
			lineHeight: 56, // 行高
			rich: {
				a: {//可以自定义富文本样式
					// rich中如果没有设置lineHeight,则取父层级的lineHeight
				}
			},
			width: 100, // 文本显示宽度
			height: 100, // 本文显示高度
			textBorderColor: '#ddd', // 文字本身的描边颜色
			textBorderWidth: 100, // 文字本身的描边宽度
			textBorderType: 'solid', // 文字本身的描边类型(solid,dashed,dotted)
			// 自 v5.0.0 开始,也可以是 number 或者 number 数组,用以指定线条的 dash array,配合 textBorderDashOffset 可实现更灵活的虚线效果。
			// textBorderType: [5, 10],
			textBorderDashOffset: 5, // 从 v5.0.0 开始支持,用于设置虚线的偏移量,可搭配 textBorderType 指定 dash array 实现灵活的虚线效果。
			textShadowColor: 'transparent', // 文字本身的阴影颜色
			textShadowBlur: 3, // 文字本身的阴影长度
			textShadowOffsetX: 5, // 文字本身的阴影X偏移量
			textShadowOffsetY: 5, // 文字本身的阴影Y偏移量
			overflow: 'none', // 文字超出宽度是否截断或者换行,只在配置了width时有效(truncate截断,并在末尾显示ellipsis配置的文本,默认是...;break换行;breakAll换行,和break的区别是,在英语等拉丁文中,breakAll会强制单词内换行)
			ellipsis: '......', // overflow位TRUE时通过此属性配置末尾显示的文本
		},
		subtext: '', // 副标题文本,支持使用\n换行
		sublink: '', // 副标题超链接
		subtarget: 'blank', // 指定窗口打开副标题超链接,self当前窗口,blank新窗口打开
		subtextStyle: {
			// subtextStyle对象中的配置项大部分和textStyle中的一致,这部分省略,下面只记录不一样的配置项
			align: 'left', // 文字水平对齐方式,默认自动对齐(left,center,right)rich中如果没有设置align,则取父层级的align
			verticalAlign: 'top', // 文本垂直对齐方式,默认自动对齐(top,middle,bottom)rich中如果没有设置此属性,则会取父层级的verticalAlign
		}
		textAlign: 'auto', // 整体的水平对齐(包括text和subtext)可选值:auto\left\right\center
		textVerticalAlign: 'auto', // 整体的垂直对齐,包括text和subtext,可选值:auto\top\bottom\middle
		triggerEvent: true, // 是否触发事件
		padding:5, // 标题内边距,单位px,默认值为5,可以通过一个数组分别设定上下左右边距
		itemGap: 10, // 主副标题之间的间距
		zlevel: 1, // 所有图形的zlevel值,用于canvas分层,不同zlevel值的图形会放置在不同的canvas中,zlevel值大的canvas会放在上层,这是一张常见的优化手段,但是过多的canvas会引起内存开销的增大
		z: 1, // 组件的所有图形的z值,控制图形的先后顺序,z值小的图形会被值大的图形覆盖,z的优先级比zlevel低,而且不会创建新的canvas
		left: 'auto', // title组件距离容器左侧的距离,可以设置为一个number像素值(20);可以设置'20%'这种相对于容器宽高的百分比;也可以是left,center,right,设置为这几个值是组件会根据相应的位置自动对齐
		right: 'auto', // title组件距离容器右侧的距离,默认自适应;值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比
		top: 'auto', // title组件距离容器上侧的距离,以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,也可以是 'top', 'middle', 'bottom',值为'top', 'middle', 'bottom'时,组件会根据相应的位置自动对齐
		bottom: 'auto', // title组件距离容器下侧的距离,默认自适应,值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比
		backgroundColor: 'transparent', // 标题背景色,默认透明
		borderColor: '#ccc', // 标题的边框颜色
		borderWidth: 2, // 标题的边框线宽
		borderRadius: 2, // 圆角半径,单位是px,支持传入数组分别指定四个圆角半径
		shadowBlur: 2, // 图形阴影的模糊大小,前提是设置了show: true以及背景颜色不透明
		shadowColor: '#eee', // 阴影颜色,生效的前提的是show: true
		shadowOffsetX: 1, // 阴影水平方向上的偏移距离,生效的前提是show: true
		shadowOffsetY: 1, // 阴影垂直方向上的偏移距离,生效的前提是show: true 
	}
}

legend参数

图例组件

option = {
	legend: {
		type: 'plain', // 普通图例,默认值就是plain,scroll代表可滚动翻页的图例
		id: '1', // 组件ID,默认不指定,指定后可用于在option和API中使用组件
		show: true, // 是否显示legend
		zlevel: 1, // 所有图形的zlevel值,用于canvas分成,不同zlevel值的图像会放置在不同此canvas中,zlevel值大的canvas会放在zlevel小的canvas上面;canvas分层是一种常见的优化手段,但是过多的canvas分层会引起内存开销的增大
		z: 2, // 组件的所有图形的z值,控制图形的前后顺序,z值小的图形会被z值大的图形覆盖,z相比zlevel优先级低,而且不会创建新的canvas
		left: 'auto', // 图例组件距离容器左侧的距离,值可以是像 20 这样的具体像素值;可以是像 '20%' 这样相对于容器高宽的百分比;也可以是 'left', 'center', 'right',此时组件会根据相应的位置自动对齐
		right: 'auto', // 图例组件距离容器右侧的距离,值可以是像 20 这样的具体像素值;可以是像 '20%',默认自适应
		top: 'auto', // 图例组件距离容器顶部的距离,值可以是像 20 这样的具体像素值;可以是像 '20%' 这样相对于容器高宽的百分比;也可以是 'top', 'middle', 'bottom',此时组件会根据相应的位置自动对齐
		bottom: 'auto', // 图例组件距离容器下侧的距离,值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,默认自适应
		width: 100, // 图例组件的宽度,默认自适应auto
		height: 100, // 图例组件的高度,默认自适应auto
		orient: 'horizontal', // 图例列表的布局朝向 (horizontal,vertical)
		align: 'auto', // 图例标记和文本的对齐方式,默认自动对齐(auto\left\right)
		padding: 5, // 图例内边距,默认个方向的内边距为5,可以接受一个数组分别设定上下左右边距
		itemGap: 10, // 图例每项之间的间隔,横向布局是为水平间隔,纵向布局时为纵向间隔
		itemWidth: 25, // 图例标记的图形宽度
		itemHeight: 14, // 图例标记的图形高度
		itemStyle: { // 图例的图形样式,属性取值为inherit时,表示继承系列中的属性值
			color: 'inherit', // 图形的颜色
			borderColor: 'inherit', // 图形的描边颜色,不支持回调函数
			borderWidht: 'auto', // 图形边框线宽,值为auto时,如果系列有borderWidth取2,系列没有borderWidth则取0,当其值为inehrit,始终取系列的borderWidth
			// 自 v5.0.0 开始,也可以是 number 或者 number 数组,用以指定线条的 dash array,配合 borderDashOffset 可实现更灵活的虚线效果。
			// borderType: [5, 10],
			borderType: 'inherit', // 描边类型(solid,dashed,dotted)
			borderDashOffset: 'inherit', // 从v5.0.0开始支持,用于设置虚线的偏移量,可以搭配borderType属性使用
			borderCap: 'inherit', // 指定线段末端的绘制方式(butt线段末端以方形结束,round线段末端以圆形结束,square线段以方形结束,但是增加一个宽度和线段相同,高度是线段厚度一半的矩形区域)
			borderJoin: 'inherit', // v5.0.0开始支持,?
			// 配置太多了,未完待续...
		}
	}
}

grid 参数

  • 直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴,可以在网格上绘制折线图,柱状图,散点图
  • ECharts 2.x里单个echarts始终只允许有一个grid组件,ECharts 3中可以存在任意个grid组件
option = {
	grid: {
		id: '1', // 组件ID,默认不指定,指定后可用于在option或者API中使用组件
		show: true, //  是否显示直角坐标系网络
		zlevel: 1, // 所有图形的zlevel值,用于canvas分层
		z: 2, // 组件的素有图形的z值,控制图形的先后顺序,z值小的图形会被z值大的图形a覆盖,z相比zlevel优先级更低,而且并不会创建新的canvas
		left: '10%', // grid组件距离容器左侧的距离(取值:60,20%,center)
		top: '30', // grid组件距离容器上侧的距离
		right: '10%', // grid组件距离容器右侧的距离,具体取值类似left
		bottom: '30', // grid组件距离容器底部的距离,具体取值类似top
		width: 'auto', // grid组件的宽度,默认自适应(number,string)
		height: 'auto', // grid组件的高度,默认自适应(number,string)
		containLabel: true, // grid区域是否包含坐标轴的刻度标签,值为false时,grid的left\right\top\bottom\width\height决定的是由坐标轴形成的举行的尺寸和位置,值为true时,这些属性决定了坐标轴标签在内的所有内容所形成的矩形的位置(常用于防止标签溢出)
		backgroundColor: 'transparent', // 网格背景颜色,默认透明 (设置show: true后生效)
		borderColor: '#ccc', // 网格的边框的颜色 (设置show: true后生效)
		borderWidth: 1, // 网格的边框线宽, 设置show: true后生效
		shadowBlur: 10, // 图形阴影的模糊大小
		shadowColor: '#eee', // 阴影的的颜色,设置show: true后生效
		shadowOffsetX: 10, // 阴影水平方向的偏移距离,设置show: true 后生效
		shaowOffsetY: 10, // 阴影垂直方向上的偏移距离,设置show: true后生效
		tooltip: {}, // 本坐标系特定的tooltip设定,配置项同全局tooltip
	}
}

xAxis 参数

直角坐标系grid中的x轴,单个grid组件多于两个X轴时需要使用offset属性防止同位置上多个x轴的堆叠。

option = {
	xAxis: {
		id: '1', // 组件id, 默认不指定, 指定后可用于在option或者API中引用组件
		show: true, // 是否显示x轴
		gridIndex: 1, // x轴所在的grid 的索引,默认位于第一个grid
		position: 'top', // x轴的位置,(top/bottom)
		offset: 10, // x轴相对于默认我i之的偏移,在相同的position上有多个x轴时使用
		realtimeSort: true, // 用于制作动态排序柱状图,值为true时,表示x轴开启实时排序效果(仅当x轴的type是value时有效)
	}
}

样式

颜色主题

在初始化echarts时,指定颜色主题

// 在chart初始化时,切换ECharts5内置的深色主题
var myChart = echarts.init(el,'dark');

没有内置在ECharts中的主题,可以自行加载

// 如果主题保存为 JSON 文件
// 假设主题名称是 "vintage"
$.getJSON('xxx/xxx/vintage.json', function(themeJSON) {
  echarts.registerTheme('vintage', JSON.parse(themeJSON));
  var chart = echarts.init(dom, 'vintage');
});

// 如果保存为 UMD 格式的 JS 文件,文件内部已经做了自注册,直接引入 JS 即可
// HTML 引入 vintage.js 文件后(假设主题名称是 "vintage")
var chart = echarts.init(dom, 'vintage');

调色盘

调色盘给定一组颜色,图形、系列会自动从其中选择颜色,调色盘可以设置在option中成为全局调色盘,也可以设置在series中成为系列专属调色盘

  color: [
    '#c23531',
    '#2f4554',
    '#61a0a8',
    '#d48265',
    '#91c7ae',
    '#749f83',
    '#ca8622',
    '#bda29a',
    '#6e7074',
    '#546570',
    '#c4ccd3'
  ],

itemStyle、lineStyle、areaStyle、label等直接设置样式

这是一种比较常用的样式设置方式,可以通过这种方式设置图形元素的颜色、线条宽度、点的大小、标签的文字、标签的样式等

高亮的样式:emphasis

鼠标悬浮在图形元素上时的样式,默认情况下高亮样式会根据普通样式自动生成,也可以自定义:

option = {
  series: {
    type: 'scatter',
    // 普通样式。
    itemStyle: {
      // 点的颜色。
      color: 'red'
    },
    label: {
      show: true,
      // 标签的文字。
      formatter: 'This is a normal label.'
    },
    // 高亮样式。
    emphasis: {
      itemStyle: {
        // 高亮时点的颜色。
        color: 'blue'
      },
      label: {
        show: true,
        // 高亮时标签的文字。
        formatter: 'This is a emphasis label.'
      }
    }
  }
};

数据集 dataset

dataset是用来管理数据的组件。
以前给图表赋值,习惯在每个系列的series.data中设置数据。从Echarts4支持dataset开始,官方推荐使用数据集来管理数据。
使用数据集管理数据的好处:

  • 方便数据被多个组件复用
  • 符合数据和其他配置分离的风格
  • 利于基于原始数据进行图表类型、系列的映射安排

在dataset中设置数据

option = {
  legend: {},
  tooltip: {},
  dataset: {
    // 提供一份数据。
    source: [
      ['product', '2015', '2016', '2017'],
      ['Matcha Latte', 43.3, 85.8, 93.7],
      ['Milk Tea', 83.1, 73.4, 55.1],
      ['Cheese Cocoa', 86.4, 65.2, 82.5],
      ['Walnut Brownie', 72.4, 53.9, 39.1]
    ]
  },
  // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。
  xAxis: { type: 'category' },
  // 声明一个 Y 轴,数值轴。
  yAxis: {},
  // 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。
  series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
};
option = {
  legend: {},
  tooltip: {},
  dataset: {
    // 用 dimensions 指定了维度的顺序。直角坐标系中,如果 X 轴 type 为 category,
    // 默认把第一个维度映射到 X 轴上,后面维度映射到 Y 轴上。
    // 如果不指定 dimensions,也可以通过指定 series.encode
    dimensions: ['product', '2015', '2016', '2017'],
    source: [
      { product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7 },
      { product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1 },
      { product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5 },
      { product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1 }
    ]
  },
  xAxis: { type: 'category' },
  yAxis: {},
  series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
};

上面两种不同的数据集格式,经过渲染后的图表是相同的:
在这里插入图片描述

数据转换

在dataset中使用transform实现数据转换

var option = {
  dataset: [
    {
      // 这个 dataset 的 index 是 `0`。
      source: [
        ['Product', 'Sales', 'Price', 'Year'],
        ['Cake', 123, 32, 2011],
        ['Cereal', 231, 14, 2011],
        ['Tofu', 235, 5, 2011],
        ['Dumpling', 341, 25, 2011],
        ['Biscuit', 122, 29, 2011],
        ['Cake', 143, 30, 2012],
        ['Cereal', 201, 19, 2012],
        ['Tofu', 255, 7, 2012],
        ['Dumpling', 241, 27, 2012],
        ['Biscuit', 102, 34, 2012],
        ['Cake', 153, 28, 2013],
        ['Cereal', 181, 21, 2013],
        ['Tofu', 395, 4, 2013],
        ['Dumpling', 281, 31, 2013],
        ['Biscuit', 92, 39, 2013],
        ['Cake', 223, 29, 2014],
        ['Cereal', 211, 17, 2014],
        ['Tofu', 345, 3, 2014],
        ['Dumpling', 211, 35, 2014],
        ['Biscuit', 72, 24, 2014]
      ]
      // id: 'a'
    },
    {
      // 这个 dataset 的 index 是 `1`。
      // 这个 `transform` 配置,表示,此 dataset 的数据,来自于此 transform 的结果。
      transform: {
        type: 'filter',
        config: { dimension: 'Year', value: 2011 }
      }
      // 我们还可以设置这些可选的属性: `fromDatasetIndex` 或 `fromDatasetId`。
      // 这些属性,指定了,transform 的输入,来自于哪个 dataset。例如,
      // `fromDatasetIndex: 0` 表示输入来自于 index 为 `0` 的 dataset 。又例如,
      // `fromDatasetId: 'a'` 表示输入来自于 `id: 'a'` 的 dataset。
      // 当这些属性都不指定时,默认认为,输入来自于 index 为 `0` 的 dataset 。
    },
    {
      // 这个 dataset 的 index 是 `2`。
      // 同样,这里因为 `fromDatasetIndex` 和 `fromDatasetId` 都没有被指定,
      // 那么输入默认来自于 index 为 `0` 的 dataset 。
      transform: {
        // 这个类型为 "filter" 的 transform 能够遍历并筛选出满足条件的数据项。
        type: 'filter',
        // 每个 transform 如果需要有配置参数的话,都须配置在 `config` 里。
        // 在这个 "filter" transform 中,`config` 用于指定筛选条件。
        // 下面这个筛选条件是:选出维度( dimension )'Year' 中值为 2012 的所有
        // 数据项。
        config: { dimension: 'Year', value: 2012 }
      }
    },
    {
      // 这个 dataset 的 index 是 `3`。
      transform: {
        type: 'filter',
        config: { dimension: 'Year', value: 2013 }
      }
    }
  ],
  series: [
    {
      type: 'pie',
      radius: 50,
      center: ['25%', '50%'],
      // 这个饼图系列,引用了 index 为 `1` 的 dataset 。也就是,引用了上述
      // 2011 年那个 "filter" transform 的结果。
      datasetIndex: 1
    },
    {
      type: 'pie',
      radius: 50,
      center: ['50%', '50%'],
      datasetIndex: 2
    },
    {
      type: 'pie',
      radius: 50,
      center: ['75%', '50%'],
      datasetIndex: 3
    }
  ]
};

链式声明transform,一个语法糖

option = {
  dataset: [
    {
      source: [
        // 原始数据
      ]
    },
    {
      // 几个 transform 被声明成 array ,他们构成了一个链,
      // 前一个 transform 的输出是后一个 transform 的输入。
      transform: [
        {
          type: 'filter',
          config: { dimension: 'Product', value: 'Tofu' }
        },
        {
          type: 'sort',
          config: { dimension: 'Year', order: 'desc' }
        }
      ]
    }
  ],
  series: {
    type: 'pie',
    // 这个系列引用上述 transform 的结果。
    datasetIndex: 1
  }
};

数据转换器filter

在transform.type中声明数据转换器,并且在transform.config中给出数据筛选条件

 {
      transform: {
      	// filter表示过滤
        type: 'filter',
        config: { dimension: 'Year', '=': 2011 }
        // 这个筛选条件表示,遍历数据,筛选出维度( dimension )
        // 'Year' 上值为 2011 的所有数据项。
      }
   }
// 逻辑比较操作(and\or\not,这三种操作符之间是可以互相嵌套的)
{
      transform: {
        type: 'filter',
        config: {
          // 使用 and 操作符。
          // 类似地,同样的位置也可以使用 “or” 或 “not”。
          // 但是注意 “not” 后应该跟一个 {...} 而非 [...] 。
          and: [
            { dimension: 'Year', '=': 2011 },
            { dimension: 'Price', '>=': 20, '<': 30 }
          ]
        }
        // 这个表达的是,选出 2011 年价格大于等于 20 但小于 30 的数据项。
      }
    }

数据转换器sort

sort用于数据排序,主要用于在类目轴上(axis.type: ‘category’)

{
      transform: {
        type: 'sort',
        // 按score排序
        config: { dimension: 'score', order: 'asc' }
      }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值