ECharts——数据可视化库
ECharts——数据可视化库
·
一、概述
ECharts 是一个由百度团队开发的基于 JavaScript 的开源可视化图表库,提供了丰富的图表类型和交互功能,适用于 Web 端和移动端的可视化展示,能够轻松实现各种数据可视化需求。
官方链接:Apache ECharts https://echarts.apache.org/
二、核心特性
1、丰富的图表类型
-
常规图表:折线图、柱状图、饼图、散点图、K线图等
-
地理图表:地图、热力图、航线图等
-
关系图表:关系图、桑基图、树图等
-
3D图表:3D柱状图、3D散点图、3D曲面图等
-
其他特殊图表:仪表盘、漏斗图、雷达图等
2、强大的交互功能
-
数据缩放、漫游
-
值域漫游
-
数据区域选择
-
图例开关
-
动态类型切换
-
数据刷选
3、多设备适配
-
响应式设计
-
移动端优化
-
自动识别设备类型调整展示效果
三、ECharts 配置项
ECharts通过配置项(option)来定义图表的各种属性和行为。
1、基本结构
option = {
// 标题组件
title: {...},
// 图例组件
legend: {...},
// 直角坐标系内绘图网格
grid: {...},
// x轴配置
xAxis: {...},
// y轴配置
yAxis: {...},
// 极坐标系配置
polar: {...},
// 半径轴
radiusAxis: {...},
// 角度轴
angleAxis: {...},
// 雷达图坐标系
radar: {...},
// 数据缩放组件
dataZoom: [...],
// 视觉映射组件
visualMap: [...],
// 工具栏
toolbox: {...},
// 提示框组件
tooltip: {...},
// 坐标系配置
axisPointer: {...},
// 系列列表
series: [...],
// 颜色列表
color: [...],
// 背景色
backgroundColor: 'transparent',
// 动画配置
animation: true,
animationDuration: 1000,
animationEasing: 'cubicOut'
};
2、核心结构
(1)标题组件(title)
title: {
text: '销售数据统计', // 主标题文本
subtext: '2023年度', // 副标题文本
left: 'center', // 水平安放位置
top: 0, // 垂直安放位置
textStyle: { // 标题文本样式
color: '#333',
fontSize: 18,
fontWeight: 'bold'
},
subtextStyle: { // 副标题文本样式
color: '#666',
fontSize: 12
}
}
(2)图例组件(legend)
legend: {
type: 'plain', // 图例类型,可选'plain'(普通)和'scroll'(可滚动)
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'], // 图例数据数组
orient: 'horizontal', // 布局方向,'horizontal'或'vertical'
left: 'center', // 距离左侧距离
top: 'bottom', // 距离顶部距离
itemWidth: 25, // 图例标记的图形宽度
itemHeight: 14, // 图例标记的图形高度
textStyle: { // 图例文字的样式
color: '#333'
}
}
(3)坐标轴配置(xAxis/yAxis)
xAxis: {
type: 'category', // 坐标轴类型,'category'类目轴,'value'数值轴
data: ['1月', '2月', '3月', '4月', '5月', '6月'], // 类目数据
axisLine: { // 坐标轴轴线相关设置
lineStyle: {
color: '#999'
}
},
axisLabel: { // 坐标轴刻度标签的相关设置
interval: 0, // 坐标轴刻度标签的显示间隔
rotate: 45 // 刻度标签旋转的角度
},
axisTick: { // 坐标轴刻度相关设置
alignWithLabel: true // 类目轴中在 boundaryGap 为 true 时有效
},
splitLine: { // 坐标轴在 grid 区域中的分隔线
show: false // 是否显示分隔线
}
},
yAxis: {
type: 'value', // 数值轴
min: 0, // 坐标轴最小值
max: 100, // 坐标轴最大值
splitNumber: 5, // 坐标轴的分割段数
axisLine: {
show: true
},
axisLabel: {
formatter: '{value}%' // 标签内容格式器
},
splitLine: {
lineStyle: {
type: 'dashed' // 分隔线样式
}
}
}
(4)数据系列(series)
series: [
{
name: '销量', // 系列名称
type: 'bar', // 图表类型:line(折线图)、bar(柱状图)、pie(饼图)等
data: [5, 20, 36, 10, 10, 20], // 数据数组
itemStyle: { // 图形样式
color: '#4ad2ff',
borderColor: '#008acd',
borderWidth: 1
},
label: { // 图形上的文本标签
show: true,
position: 'top'
},
barWidth: '40%', // 柱条宽度
barGap: '30%', // 不同系列的柱间距离
markPoint: { // 标注点
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: { // 标线
data: [
{type: 'average', name: '平均值'}
]
}
},
{
name: '增长率',
type: 'line',
data: [2.1, 4.2, 6.3, 8.4, 10.5, 12.6],
smooth: true, // 是否平滑曲线显示
symbol: 'circle', // 标记的图形
symbolSize: 8, // 标记的大小
lineStyle: {
width: 3,
color: '#ff8f00'
},
areaStyle: { // 区域填充样式
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: 'rgba(255, 143, 0, 0.5)'},
{offset: 1, color: 'rgba(255, 143, 0, 0)'}
])
}
}
]
(5)提示框组件(tooltip)
tooltip: {
trigger: 'axis', // 触发类型,'item'(数据项图形触发)、'axis'(坐标轴触发)
axisPointer: { // 坐标轴指示器配置
type: 'shadow', // 指示器类型,'line'(直线)、'shadow'(阴影)、'none'(无)
shadowStyle: {
color: 'rgba(150,150,150,0.1)'
}
},
backgroundColor: 'rgba(50,50,50,0.7)', // 背景颜色
borderColor: '#333', // 边框颜色
borderWidth: 0, // 边框线宽
padding: 10, // 内边距
textStyle: { // 文本样式
color: '#fff',
fontSize: 12
},
formatter: function(params) { // 提示框内容格式器
let result = params[0].name + '<br/>';
params.forEach(function(item) {
result += item.marker + ' ' + item.seriesName + ': ' + item.value;
if (item.seriesName === '增长率') {
result += '%';
}
result += '<br/>';
});
return result;
}
}
(6)工具箱(toolbox)
toolbox: {
feature: { // 各工具配置项
saveAsImage: { // 保存为图片
type: 'png',
name: '销售统计图',
backgroundColor: '#fff'
},
restore: {}, // 配置项还原
dataView: { // 数据视图工具
readOnly: false,
optionToContent: function(opt) {
let axisData = opt.xAxis[0].data;
let series = opt.series;
let table = '<table style="width:100%; text-align:center"><tbody><tr><td>月份</td>';
series.forEach(function(item) {
table += '<td>' + item.name + '</td>';
});
table += '</tr>';
for (let i = 0; i < axisData.length; i++) {
table += '<tr><td>' + axisData[i] + '</td>';
series.forEach(function(item) {
table += '<td>' + item.data[i] + '</td>';
});
table += '</tr>';
}
table += '</tbody></table>';
return table;
}
},
magicType: { // 动态类型切换
type: ['line', 'bar', 'stack']
},
brush: { // 区域选择组件
type: ['rect', 'polygon', 'keep', 'clear']
}
}
}
(7)视觉映射(visualMap)
visualMap: {
type: 'continuous', // 连续型视觉映射组件
min: 0, // 指定 visualMap 组件的允许的最小值
max: 100, // 指定 visualMap 组件的允许的最大值
text: ['高', '低'], // 两端的文本
inRange: { // 定义在选中范围内时的视觉元素
color: ['#50a3ba', '#eac736', '#d94e5d'] // 颜色映射
},
calculable: true, // 是否显示拖拽用的手柄
orient: 'horizontal', // 布局方式
left: 'center', // 组件离容器左侧的距离
bottom: 20 // 组件离容器下侧的距离
}
(8)数据区域缩放(dataZoom)
dataZoom: [
{
type: 'slider', // 滑动条型数据区域缩放组件
show: true, // 是否显示组件
xAxisIndex: 0, // 控制的x轴索引
start: 0, // 数据窗口范围的起始百分比
end: 50, // 数据窗口范围的结束百分比
handleSize: 8 // 控制手柄的尺寸
},
{
type: 'inside', // 内置型数据区域缩放组件
xAxisIndex: 0,
start: 0,
end: 100
}
]
3、高级配置技巧
(1) 主题设置
ECharts 内置了多种主题,也可以通过 echarts.registerTheme()
注册自定义主题。
// 使用内置主题
var chart = echarts.init(dom, 'dark');
// 自定义主题
echarts.registerTheme('my_theme', {
color: ['#c23531','#2f4554','#61a0a8','#d48265','#91c7ae'],
backgroundColor: '#eee',
textStyle: {},
title: {
textStyle: {
color: '#333'
}
}
// 其他样式配置...
});
(2)响应式布局
ECharts 提供了 resize()
方法来响应容器尺寸变化。
window.addEventListener('resize', function() {
myChart.resize();
});
(3)异步数据加载
myChart.showLoading(); // 显示加载动画
$.get('data.json').done(function(data) {
myChart.setOption({
series: [{
data: data
}]
});
myChart.hideLoading(); // 隐藏加载动画
});

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)